Mysql 正在从查询中删除“使用文件排序”
我有以下疑问:Mysql 正在从查询中删除“使用文件排序”,mysql,sql,query-optimization,filesort,Mysql,Sql,Query Optimization,Filesort,我有以下疑问: SELECT * FROM shop_user_member_spots WHERE delete_flag = 0 ORDER BY date_spotted desc LIMIT 10 运行时需要几分钟。该表大约有250万行 这张桌子不是我设计的,但我可以做一些修改: 最后,这里是索引,不是我做的 我已经尝试让这个查询快速运行了几个小时,但没有结果 以下是EXPLAIN的输出: 非常感谢您提供的任何帮助/文章。我在解释计划中看到的问题是
SELECT *
FROM shop_user_member_spots
WHERE delete_flag = 0
ORDER BY date_spotted desc
LIMIT 10
运行时需要几分钟。该表大约有250万行
这张桌子不是我设计的,但我可以做一些修改:
最后,这里是索引,不是我做的
我已经尝试让这个查询快速运行了几个小时,但没有结果
以下是EXPLAIN的输出:
非常感谢您提供的任何帮助/文章。我在解释计划中看到的问题是,没有使用在发现日期的索引,而是使用了insted filesort机制对delete标志上的索引进行排序,如果创建索引的列包含唯一的值,我们实际上可以获得索引的性能优势 mysql文档说 索引将不用于order by子句,如果 用于获取行的键与ORDER BY中使用的键不同: 从t1中选择*,其中键2=按键1的恒定顺序
我想这里也是这样。尽管您可以根据查询尝试使用Force Index,但您想要的索引似乎位于delete_标志date_上。您有一个包含两列的索引,但id列位于这两列之间,这将使该索引对基于日期的排序毫无帮助。现在,mysql是否会使用基于Zohaib答案的索引我不能说抱歉,我最常使用SQL Server。为什么需要在simple selectI中为表添加别名我不需要,此查询是更大查询的一部分,我没有删除别名。如果它能让你更开心的话,我现在就删除它:-大概有多少行25行?200万?是否可能已删除设置为0的_标志?我看到了,但不确定如何处理这些新知识。我尝试过使用强制索引,但不确定要在哪个索引上使用它,也不确定要创建什么索引。我不是很确定,但根据文档,删除索引标志,发现日期可能会有所帮助。