我试图理解下面的查询的解释结果。我得到了rows=7 (表的总大小),但是实际的查询只返回1行。解释结果上的rows=7是否意味着MySQL检查了每一行仍然得到这个结果?
 EXPLAIN SELECT conversation_id FROM messages 
    WHERE to_id = '355' AND timestamp < '1376856934' LIMIT 1;只有4行必须是_id=‘355’,列to_id和时间戳都被索引在一起,所以我不明白为什么要扫描整个表才能得到1行。
发布于 2013-08-18 22:51:45
EXPLAIN输出中的" rows“列是对需要检查的行数的估计。
查询是否实际需要检查表中的每一行实际上取决于访问计划(在EXPLAIN输出中的其他列中显示)。例如,索引范围扫描操作不必查看每一行,只查看特定索引范围中的行。但是,一个完整的扫描操作将检查表中的每一行。
您的问题不能根据“行”列中返回的值来回答;我们确实需要查看EXPLAIN的输出,以确定MySQL是否使用索引范围扫描。
http://dev.mysql.com/doc/refman/5.5/en/explain-output.html
发布于 2013-08-18 22:34:14
来自MySQL文档:
限制子句可用于限制SELECT语句返回的行数。
EXPLAIN描述如何收集结果,LIMIT仅限制从以前收集的结果返回哪些行。
https://stackoverflow.com/questions/18304136
复制相似问题