首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用EXPLAIN优化MySQL查询

使用EXPLAIN优化MySQL查询
EN

Stack Overflow用户
提问于 2016-02-28 14:15:24
回答 1查看 33关注 0票数 1

我正在尝试使用解释优化我的MySQL查询。下面是一个非常简单的查询示例:

代码语言:javascript
复制
SELECT ID, Date, SenderID, Message FROM messages WHERE ReceiverID = '1000' ORDER BY ID DESC LIMIT 25;

当我看到“解释”时,它显示:

代码语言:javascript
复制
+----+-------------+-----------+------+---------------+------------+---------+-------+------+-----------------------------+
| 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?我也不知道为什么它要使用文件。这个查询不是很慢,但是其他结果较大的查询往往比较慢,“行”数似乎是我预期的两倍.

这可能是非常直截了当的东西,但我一定是遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 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()?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35683579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档