MySQL:为什么这个SQL查询不使用索引?

MySQL:为什么这个SQL查询不使用索引?,mysql,indexing,explain,Mysql,Indexing,Explain,我有一个非常简单的SELECT,它求助于filesort,而不使用索引 考虑以下查询: SELECT * FROM forum_topic WHERE topic_status = 0 ORDER BY modified_date LIMIT 0, 30 在下表中,删去了几列,使其更加简短 EXPLAIN给出以下输出 id select_type table? partitions? type? possible_keys? key? key_len? ref?

我有一个非常简单的SELECT,它求助于filesort,而不使用索引

考虑以下查询:

SELECT * FROM forum_topic
WHERE topic_status = 0
ORDER BY modified_date LIMIT 0, 30
在下表中,删去了几列,使其更加简短

EXPLAIN给出以下输出

id  select_type table?      partitions? type?   possible_keys?  key?    key_len?    ref?    rows?   Extra?
1   SIMPLE      forum_topic NULL        ALL     NULL            NULL    NULL    NULL    2075    Using where; Using filesort
请注意解释如何表示可能的_键为NULL,以及扫描所有行后如何使用filesort

请给我一些建议。谢谢。

此查询需要主题状态显示在索引的最重要位置,因为它正在搜索常量

你有

   KEY `modified` (`modified_date`, `topic_status`)
你可能想要

   KEY `mod2` (`topic_status`, `modified_date` )
相反。这可以通过以下方式满足过滤器和订单。。。限制查询的一部分

专业提示:避免选择*并列举实际需要的列


专业提示:Filesort并不一定意味着你认为它意味着什么。MySQL需要为排序等构建中间结果集的任何时候都可以使用它。

修改后的索引可能会将字段向后;一共有几排?谢谢。它现在仍然使用索引条件,但仍然必须使用所有行。另外,当在这个表上添加一些左连接时,为了从其他表中获取诸如用户名和论坛名之类的内容,它再次求助于使用索引条件;使用临时设备;使用文件排序-这不太好,对吗?
   KEY `mod2` (`topic_status`, `modified_date` )