我想要一种快速的方法来计算表中有几百万行的行数。我在Stack Overflow上找到了“ MySQL:最快的行数计数方法 ”一文,它看起来可以解决我的问题。Bayuah提供了以下答案:
SELECT
table_rows "Rows Count"
FROM
information_schema.tables
WHERE
table_name="Table_Name"
AND
table_schema="Database_Name";
我喜欢它,因为它看起来像查找而不是扫描,因此它应该很快,但是我决定对它进行测试
SELECT COUNT(*) FROM table
看看有多少性能差异。
不幸的是,我得到了如下所示的不同答案:
题
为什么答案相差约200万行?我猜执行全表扫描的查询是更准确的数字,但是有没有一种方法可以不必运行此慢查询就可以获取正确的数字?
我跑了ANALYZE TABLE data_302
,完成了0.05秒。当我再次运行查询时,我现在得到了34384599行的更接近的结果,但是它仍然select count(*)
与34906061行的数字不同。分析表是否立即返回并在后台处理?我觉得值得一提的是,这是一个测试数据库,目前尚未写入。
没有人会在乎是否只是告诉某人一个表有多大的情况,但是我想将行数传递给一些代码,该代码将使用该数字来创建一个“大小相等”的异步查询来查询数据库并行地,类似于Alexander Rubin通过并行查询执行来提高慢查询性能中所示的方法。照原样,我将获得最高的ID,SELECT id from table_name order by id DESC limit 1
并希望我的表不要过于分散。
NUM_ROWS
科拉姆