0

我试图理解下面查询的 EXPLAIN 结果。我得到 rows=7 (表的总大小),但实际查询只返回 1 行。解释结果上的 rows=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 行。

4

2 回答 2

1

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

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

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

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

于 2013-08-18T22:51:45.393 回答
0

来自 MySQL 文档:

LIMIT 子句可用于限制 SELECT 语句返回的行数。

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

于 2013-08-18T22:34:14.283 回答