我有一张使用innodb的桌子。我知道这个表大约有8900万行。使用
SELECT COUNT(*) FROM table;
大约需要五分钟才能运行。我知道innodb没有针对无条件COUNT(*)查询进行优化。如何重新构建查询以更快地计算?只是添加WHERE 1 = 1工作,还是我需要查询特定字段?
我知道我可以使用SHOW TABLE STATUS获得大致的行数,但是我想在PHP脚本中获取值,并且似乎有很多需要深入研究使用该方法。
答案 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可能对您有用。