Я пытался и все гуглил и до сих пор не могу понять, что происходит.
У меня большая таблица (100M + строк).Среди прочего он имеет 3 столбца: user_id, date, type.Он имеет индекс idx(user_id, type, date)
.
Когда я EXPLAIN
, этот запрос:
SELECT *
FROM table
WHERE user_id = 12345
AND type = 'X'
ORDER BY date DESC
LIMIT 5
EXPLAIN показывает, что MySQL проверял 110K строк.это примерно ряд строк этого user_id.
Мой вопрос:
Почему этот же индекс не используется для ORDER_BY LIMIT 5
?Он знает, какие строки принадлежат user_id, дата является частью того же индекса, так почему бы просто не взять последние 5 строк в этом индексе?
PS Я пробовал индексировать по (user_id, date, type) - те же результаты;я попытался удалить DESC - те же результаты.
Это план EXPLAIN
:
id: 1
select_type: SIMPLE
table: s
type: ref
possible_keys: dateIdx,userTypeDateIdx
key: userTypeDateIdx
key_len: 5
ref: const,const
rows: 110118
Extra: Using where
Я также попытался добавить подсказку FORCE INDEX FOR ORDER BY
, но я все еще получаю rows: 110118
.