У меня есть запрос с предложением ORDER BY, который использует столбец, который является последним столбцом в индексе, который используется в предложении WHERE, по существу, в форме:
SELECT
cols
FROM
tables
WHERE
col_1 = x
AND col_2 = y
AND col_3 = z
ORDER BY col_4
и индекс создается для столбцов (col_1, col_2, col_3, col_4) в указанном порядке.
При профилировании запроса более 99% времени уходит в состояние «Результат сортировки». col_4 - это столбец отметки времени, если это имеет значение. Я понимаю, что ORDER BY может использовать индекс только при определенных обстоятельствах, но я все еще немного озадачен тем, когда именно оптимизатор сделает это.
Вы используете
EXPLAIN
по вашему запросу (explain select-or-whatever-your-query-is
).possible_keys
покажите те, которые можно использовать,key
те , которые на самом деле использовали.источник
explain format=json select ...
еще более мощный. Он включает в себя информацию оused_key_parts
том, использовался ли составной ключ частично или полностью, аindex_condition
также информацию о том, какая часть запроса отвечает за какой индекс.