EXPLAIN行始终返回表中的所有行

时间:2013-08-18 22:10:17

标签: mysql explain

我正在尝试理解下面查询的EXPLAIN结果。我得到rows = 7(表的总大小)但实际查询只返回1行。解释结果中的行= 7是否意味着MySQL检查每一行仍然得到这个结果?

 EXPLAIN SELECT conversation_id FROM messages 
    WHERE to_id = '355' AND timestamp < '1376856934' LIMIT 1;

只有4行有to_id ='355',并且to_id和timestamp列都被索引在一起,所以我不明白为什么它必须扫描整个表只是为了获得1行。

2 个答案:

答案 0 :(得分:1)

EXPLAIN输出中的“rows”列是对需要检查的行数的估计。

查询是否真的需要检查表中的每一行实际上取决于访问计划(显示在EXPLAIN输出的其他列中。例如,索引范围扫描操作不必查看每个row,只有特定索引范围内的行。但是完整扫描操作将查看表中的每一行。

根据“行”列中返回的值,无法回答您的问题;我们真的需要看看EXPLAIN的输出来确定MySQL是否正在使用索引范围扫描。

http://dev.mysql.com/doc/refman/5.5/en/explain-output.html

答案 1 :(得分:0)

来自MySQL文档:

  

LIMIT子句可用于约束SELECT语句返回的行数。

EXPLAIN描述了如何收集结果,LIMIT仅限制应从先前收集的结果返回哪些行。