count(*) in InnoDB
1 Dec 2006
I’d always read that an advantage of MySQL’s MyISAM tables over InnoDB tables was the performance of counting rows with count(*). Conventional wisdom says if you do count(*) with InnoDB you’ll see much slower results on large tables than if you use MyISAM.
I hadn’t ever noticed that difference. In places in my apps where I do count(*) InnoDB seems to be just as fast as MyISAM—even on tables with millions of rows. MySQL Performance Blog has an explanation.
It only applies to
COUNT(*)queries withoutWHEREclause.SELECT COUNT(*) FROM USER... will be much faster for MyISAM.SELECT COUNT(*) FROM IMAGE WHERE USER_ID=5... will be executed same way both for MyISAM and Innodb.
Since most real-world usage of count(*) is in determining how many rows are returned by a query, not how many rows exist in a table, most people won’t need to concern themselves with this performance "issue."