MySQL索引和ORDERBY子句

MySQL索引和ORDERBY子句,mysql,Mysql,假设我有这样一个简单的查询: SELECT * FROM topics ORDER BY last_post_id DESC 根据,应使用last\u post\u id上的索引。但是EXPLAINing查询说明了相反的情况: id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE topic_info ALL NULL NULL NULL NULL

假设我有这样一个简单的查询:

SELECT * FROM topics ORDER BY last_post_id DESC
根据,应使用
last\u post\u id
上的索引。但是
EXPLAIN
ing查询说明了相反的情况:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  topic_info  ALL NULL    NULL    NULL    NULL    13  Using filesort

为什么我的索引没有被使用?

你真的只有13行吗?数据库可能认为简单地对它们进行排序比通过索引进行排序要快。

试着按照特定列在表中的顺序选择它们。当顺序改变时,MySQL索引不起作用。

索引优化的基本原则是使用代表性数据进行测试。表中的几行对于索引或优化器在现实生活中的工作方式没有预测价值


如果您确实只有几条记录,那么索引将不会提供有效的好处。

解释只会告诉您选择过程,在这种情况下,查询将必须检查所有13行,以查看它们是否符合WHERE子句(您没有,因此这是无用的信息!)。它只报告用于此目的的索引和键(计算WHERE、JOIN、have)。因此,无论查询是否使用索引进行排序,EXPLAIN都不会告诉您,因此不要被其结果所困扰

是的,查询使用索引快速排序。我注意到EXPLAIN也有相同的结果(即报告所有行,尽管按索引排序并有限制),我怀疑这是因为表中的行数很少,而是EXPLAIN功能的限制