Eu tenho uma consulta com uma cláusula ORDER BY que usa uma coluna que é a última coluna em um índice que está sendo usado na cláusula WHERE, essencialmente do formulário:
SELECT
cols
FROM
tables
WHERE
col_1 = x
AND col_2 = y
AND col_3 = z
ORDER BY col_4
e o índice é criado nas colunas (col_1, col_2, col_3, col_4) nessa ordem.
Quando eu perfil a consulta, mais de 99% do tempo é gasto no estado "Resultado da classificação". col_4 é uma coluna de carimbo de data / hora, se isso faz alguma diferença. Entendo que ORDER BY só pode usar um índice em determinadas circunstâncias, mas ainda estou um pouco confuso quanto ao momento exato em que o otimizador o faria.
Você usa
EXPLAIN
na sua consulta (explain select-or-whatever-your-query-is
).possible_keys
mostre os que poderiam ser usados,key
aquele realmente usado.fonte
explain format=json select ...
é ainda mais poderoso. Incluiused_key_parts
, que informa se uma chave composta foi usada parcial ou totalmente, eindex_condition
informa qual parte da consulta é responsável por qual índice.