我有以下疑问:
SELECT *
FROM shop_user_member_spots
WHERE delete_flag = 0
ORDER BY date_spotted desc
LIMIT 10运行时,需要几分钟的时间。该表大约有250万行。
下面是表格(不是我设计的,但我可以做一些修改):

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

几个小时以来,我一直在尝试让这个查询快速运行,但都没有结果。
下面是EXPLAIN的输出:

任何帮助/文章都是非常感谢的。
发布于 2011-12-02 20:08:30
根据您的查询,您想要的索引似乎应该在(delete_flag, date_spotted)上。您有一个包含这两列的索引,但是id列位于这两列之间,这将使索引对基于date_spotted的排序没有帮助。现在,mysql是否会使用基于Zohaib的答案的索引,我不能说(对不起,我最常使用SQL Server)。
发布于 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
https://stackoverflow.com/questions/8355936
复制相似问题