Tengo una consulta con una cláusula ORDER BY que utiliza una columna que es la última columna de un índice que se utiliza en la cláusula WHERE, esencialmente de la forma:
SELECT
cols
FROM
tables
WHERE
col_1 = x
AND col_2 = y
AND col_3 = z
ORDER BY col_4
y el índice se crea en columnas (col_1, col_2, col_3, col_4) en ese orden.
Cuando perfilo la consulta, más del 99% del tiempo se pasa en el estado "Resultado de la clasificación". col_4 es una columna de marca de tiempo si eso hace alguna diferencia. Entiendo que ORDER BY solo puede usar un índice bajo ciertas circunstancias, pero todavía estoy un poco desconcertado sobre cuándo exactamente lo haría el optimizador.
Usas
EXPLAIN
en tu consulta (explain select-or-whatever-your-query-is
).possible_keys
muestra los que podrían usarse,key
el que realmente se usó.fuente
explain format=json select ...
es aún más poderoso. Incluyeused_key_parts
, que le indica si una clave compuesta se utilizó parcial o totalmente, yindex_condition
le indica qué parte de la consulta es responsable de qué índice.