Я столкнулся с проблемой со следующим запросом:
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)
Но я получил "использование где, используя filesort" в результате объяснения
Затем я изменил индекс, чтобы использовать все пять столбцов
index1 (user_id... id)
И "использование filesort" ушел, но я все равно получаю "использование где",
Какие дальнейшие шаги я должен предпринять, чтобы полностью использовать индексы для этого запроса?
Спасибо
Если вы специально не собираетесь извлекать или проверять все строки из таблицы, у вас может быть что-то не так в вашем запросе, если значение Extra не используется.
Так что, другими словами, это абсолютно нормально и нормально.
Первый индекс используется для того, where
. Если вы также хотите использовать индекс для сортировки, вам нужен индекс (user_id, color, size, created_at, id)
.