【问题标题】:EXPLAIN and COUNT returning two different valuesEXPLAIN 和 COUNT 返回两个不同的值
【发布时间】:2011-02-27 01:15:07
【问题描述】:

我在做:

explain select * from calibration;

上面写着 52133456345632 行

当我这样做时:

select count(*) from calibration;

我收到 52134563456961

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

【问题讨论】:

  • 你没有在这两个命令的执行之间插入新行吗?
  • 只是为了澄清:计数版本将是准确的,因为它会真正计算您现有的行。解释版本不计算您的行数,但可能使用估计/缓存。 Explain 并不打算在代码或生产环境中实际使用 - 它只是帮助分析查询的工具。
  • henrik 请把它放在答案中,以便我将其标记为正确
  • 我直接将它添加到 Bill Karwins 的答案中,因为他的第一个也是正确的,只是不够明确。所以你应该接受他的。
  • 有趣的是,没有人评论一张表中有 5 万亿行

标签: sql mysql count sql-execution-plan


【解决方案1】:

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

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

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

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

【讨论】:

  • 不知道,manual page没说。但是这个数字是 99.8% 准确的,你真的需要它准确吗?
  • 我将我对问题的评论添加到您的答案中,因为它不是为了替代而只是为了澄清。希望没关系。
猜你喜欢
  • 1970-01-01
  • 2014-11-30
  • 2014-07-31
  • 2013-02-17
  • 2022-01-26
  • 1970-01-01
  • 2014-02-15
  • 2022-11-27
相关资源
最近更新 更多