我正在尝试使用解释优化我的MySQL查询。下面是一个非常简单的查询示例:
SELECT ID, Date, SenderID, Message FROM messages WHERE ReceiverID = '1000' ORDER BY ID DESC LIMIT 25;当我看到“解释”时,它显示:
+----+-------------+-----------+------+---------------+------------+---------+-------+------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-----------+------+---------------+------------+---------+-------+------+-----------------------------+
| 1 | SIMPLE | messages | ref | ReceiverID | ReceiverID | 5 | const | 34 | Using where; Using filesort |
+----+-------------+-----------+------+---------------+------------+---------+-------+------+-----------------------------+结果为15。我为ReceiverID创建了一个索引,所以我不明白为什么“解释”中的“行”显示的是34?我也不知道为什么它要使用文件。这个查询不是很慢,但是其他结果较大的查询往往比较慢,“行”数似乎是我预期的两倍.
这可能是非常直截了当的东西,但我一定是遗漏了什么?
发布于 2016-02-28 14:20:01
文件的意思是不能从索引中进行排序。
欲了解更多信息,请在这里阅读:https://www.percona.com/blog/2009/03/05/what-does-using-filesort-mean-in-mysql/。
我建议索引应该跨越ReceiverID和id。
然后,仅从索引中就可以完成排序。
行数只是一个近似。在执行查询之前,您无法知道行数。有关更多信息,请访问此处:Why the rows returns by "explain" is not equal to count()?
https://stackoverflow.com/questions/35683579
复制相似问题