EXPLAIN 和 COUNT 返回两个不同的值

发布于 2024-09-04 04:10:11 字数 229 浏览 4 评论 0原文

我正在做:

explain select * from calibration;

它说 52133456345632 行

当我这样做时:

select count(*) from calibration;

我得到 52134563456961

有人能解释一下这里发生了什么吗?

i am doing:

explain select * from calibration;

it says 52133456345632 rows

when i do:

select count(*) from calibration;

i am getting 52134563456961

can someone explain whats going on here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

憧憬巴黎街头的黎明 2024-09-11 04:10:11

表统计信息(由 EXPLAIN 使用)基于系统缓存的值,这些值可能不准确。

http://dev.mysql.com/doc/refman/ 5.1/en/using-explain.html 说:

对于 InnoDB 表,此数字是估计值,可能并不总是准确的。

因此,查询的“count()”版本将是准确的,因为它将真正“计算”现有行。 “解释”版本不一定会计算行数,但可能会使用估计/缓存。解释并不打算在代码或生产中实际使用 - 它只是帮助分析查询的工具。

Table statistics (used by EXPLAIN) are based on system-cached values that may not be accurate.

http://dev.mysql.com/doc/refman/5.1/en/using-explain.html says:

For InnoDB tables, this number is an estimate, and may not always be exact.

So the 'count()' version of the query will be accurate, as it will really 'count' existing rows. The 'explain' version does not necessarily count your rows, but might use an estimation/cache. Explain is not intended to be actually used in code or production - it is just a tool to help analysing your queries.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文