首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在从查询中删除'using filesort‘

正在从查询中删除'using filesort‘
EN

Stack Overflow用户
提问于 2011-12-02 19:52:32
回答 2查看 1.4K关注 0票数 1

我有以下疑问:

代码语言:javascript
复制
SELECT    *
FROM      shop_user_member_spots
WHERE     delete_flag = 0
ORDER BY  date_spotted desc
LIMIT     10

运行时,需要几分钟的时间。该表大约有250万行。

下面是表格(不是我设计的,但我可以做一些修改):

最后,下面是索引(同样,不是我做的!):

几个小时以来,我一直在尝试让这个查询快速运行,但都没有结果。

下面是EXPLAIN的输出:

任何帮助/文章都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-02 20:08:30

根据您的查询,您想要的索引似乎应该在(delete_flag, date_spotted)上。您有一个包含这两列的索引,但是id列位于这两列之间,这将使索引对基于date_spotted的排序没有帮助。现在,mysql是否会使用基于Zohaib的答案的索引,我不能说(对不起,我最常使用SQL Server)。

票数 0
EN

Stack Overflow用户

发布于 2011-12-02 20:00:57

我在explain计划中看到的问题是没有使用指定日期的索引,而是使用insted filesort机制进行排序(就索引on delete标志而言,如果在其上创建索引的列包含唯一值,则我们实际上获得了索引的性能优势)

mysql文档中说

在以下情况下,索引不会用于order by子句

用于获取行的键与ORDER BY中使用的键不同:

SELECT * FROM t1 WHERE key2=constant ORDER BY key1;

http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html,我想这里也是这样。尽管您可以尝试使用Force Index

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

https://stackoverflow.com/questions/8355936

复制
相关文章

相似问题

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