is SELECT COUNT(*) expensive?
COUNT(*) is optimized to return very quickly if the SELECT retrieves from one table, no other columns are retrieved, and there is no WHERE clause. For example:
mysql> SELECT COUNT(*) FROM student;
This optimization applies only to MyISAM tables only, because an exact row count is stored for this storage engine and can be accessed very quickly.
As you said you use MyISAM and your query is for the whole table, it doesn't matter if its 1 or 100000 rows.
The MyISAM engine stores the row count internally, so when issuing a query like SELECT COUNT(*) FROM table
, then it will be fast. With InnoDB, on the other hand, it will take some time because it counts the actual rows. Which means - more rows - the slower it gets. But there's a trick by which you use a small covering index to count all the rows in the table - then it's fast. Another trick is to simply store the row count in a corresponding summary table.