我想要一种快速的方法来计算我的表中有几百万行的行数。我在 Stack Overflow 上找到了帖子“ MySQL:计算行数的最快方法”,看起来它可以解决我的问题。Bayuah提供了这个答案:
SELECT
table_rows "Rows Count"
FROM
information_schema.tables
WHERE
table_name="Table_Name"
AND
table_schema="Database_Name";
Run Code Online (Sandbox Code Playgroud)
我喜欢它,因为它看起来像查找而不是扫描,所以它应该很快,但我决定对其进行测试
SELECT COUNT(*) FROM table
Run Code Online (Sandbox Code Playgroud)
看看有多大的性能差异。
不幸的是,我得到了不同的答案,如下所示:
为什么答案相差大约 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并希望我的表不会变得过于分散。