Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 正在从查询中删除“使用文件排序”_Mysql_Sql_Query Optimization_Filesort - Fatal编程技术网

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的_标志?我看到了,但不确定如何处理这些新知识。我尝试过使用强制索引,但不确定要在哪个索引上使用它,也不确定要创建什么索引。我不是很确定,但根据文档,删除索引标志,发现日期可能会有所帮助。