count(*) in InnoDB
Freshness Warning
This blog post is over 17 years old. It's possible that the information you read below isn't current and the links no longer work.
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 withoutWHERE
clause.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."