0

我有一个很大的(超过60多万条记录)表。 此表有一个主键(id,AUTO_INCREMENT索引ID)慢选择COUNT(*),information_schema,基数字段

我从这个表中选择记录的报告。要浏览并浏览此报告(用PHP编写),我正在使用分页脚本。

此脚本使用SELECT COUNT()获取此表中的记录总数。 SELECT COUNT()非常缓慢。

问题: 我可以查询统计表基数场,INFORMATION_SCHEMA DB在表格名= my_large_table_name和列名= ID和(或)INDEX_NAME是我auto_incremented ID的指标名称,然后使用结果作为总我的分页脚本中的行数?

UPDATE:

或者我可以查询表TABLESTABLE_ROWS领域information_schema,让我的表总额流行?结果是否准确?

该表使用InnoDB引擎。

+0

如果它是innodb - 那么这是一个预期的行为 – zerkms

+0

它是innoDB。你能告诉我你预期的行为是什么意思吗? – rinchik

+0

预计'COUNT(*)'在innodb中运行缓慢 – zerkms

回答

1

听起来像一个innodb表,行计数没有被缓存,因此必须计算。

表统计也不可能是精确的:

对于其它存储引擎,例如InnoDB,这个值是一个 近似,并且多达40从实际值可能会发生变化 50%。 http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html

你见过SQL_CALC_FOUND_ROWShttp://dev.mysql.com/doc/refman/5.0/en/information-functions.html

+0

从文档:'SQL_CALC_FOUND_ROWS和FOUND_ROWS()'可用于需要限制查询返回的行数的情况,也可以确定完整结果集中的行而不再次运行查询。 这不是我真正需要的。试图运行这个:'SELECT SQL_CALC_FOUND_ROWS * FROM phone_geo; SELECT FOUND_ROWS();'它真的很快...... – rinchik

+0

关于'information_schema'数据库中的表'TABLES'中'TABLE_ROWS'字段的内容? – rinchik

+0

如果您正在分页,您可能正在使用“LIMIT”来获取每页X记录。知道'FOUND_ROWS'会告诉你有多少页面允许。 –