MySQL获取innodb表中的行数

时间:2011-02-25 16:50:47

标签: mysql count innodb

我有一张使用innodb的桌子。我知道这个表大约有8900万行。使用

SELECT COUNT(*) FROM table;

大约需要五分钟才能运行。我知道innodb没有针对无条件COUNT(*)查询进行优化。如何重新构建查询以更快地计算?只是添加WHERE 1 = 1工作,还是我需要查询特定字段?

我知道我可以使用SHOW TABLE STATUS获得大致的行数,但是我想在PHP脚本中获取值,并且似乎有很多需要深入研究使用该方法。

4 个答案:

答案 0 :(得分:20)

如果你对估计的数字没问题,只是不想从PHP运行SHOW TABLE STATUS,你可以使用information_schema DB:

SELECT TABLE_ROWS FROM information_schema.tables
WHERE TABLE_SCHEMA = 'my_db_name' 
AND TABLE_NAME = 'my_table_name';

答案 1 :(得分:6)

如果您对大致的记录数量没问题,可以使用“explain”的输出。

代码的简化版本是

$result = mysql_query('explain SELECT count(*) from TABLE_NAME');
$row = mysql_fetch_assoc($result);
echo $row['rows'];

答案 2 :(得分:4)

如果频繁阅读表并且不经常更新,您可能需要考虑创建一个统计表,在对表进行更改时通过triggers更新。

答案 3 :(得分:-6)

mysql_num_rows可能对您有用。