EXPLAIN和COUNT返回两个不同的值

时间:2010-06-02 21:30:03

标签: sql mysql count sql-execution-plan

我在做:

explain select * from calibration;

它说52133456345632行

当我这样做时:

select count(*) from calibration;

我得到了52134563456961

有人可以解释这里发生的事情吗?

1 个答案:

答案 0 :(得分:7)

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

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

  

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

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