使用索引按顺序查询mysql但仍然给出“使用位置”

时间:2018-02-23 21:25:28

标签: mysql sql-execution-plan explain

我遇到以下问题的问题:

select * 
from testtable 
where user_id = 1 and color = 1 and size = 1 
order by created_at desc, id desc;

我使用了两个索引

  • index1 (user_id, color, size)
  • index2 (created_at, id)

但是我在解释结果中“使用where,使用filesort”

然后我改变了索引以使用所有五列

  • index1 (user_id ... id)

并且“使用filesort”消失了,但我仍然“使用where”

为了完全使用此查询的索引,我应该采取哪些其他步骤?

enter image description here

enter image description here

谢谢

2 个答案:

答案 0 :(得分:0)

  

除非您特意打算从表中提取或检查所有行,否则如果Extra值不是使用

From the MySQL docs

所以换句话说这是绝对正常的,好的。

答案 1 :(得分:0)

第一个索引用于where。如果您还想使用索引进行排序,那么您需要(user_id, color, size, created_at, id)上的索引。