J'ai une requête avec une clause ORDER BY qui utilise une colonne qui est la dernière colonne d'un index utilisé dans la clause WHERE, essentiellement de la forme:
SELECT
cols
FROM
tables
WHERE
col_1 = x
AND col_2 = y
AND col_3 = z
ORDER BY col_4
et l'index est créé sur les colonnes (col_1, col_2, col_3, col_4) dans cet ordre.
Lorsque je profile la requête, plus de 99% du temps est passé dans l'état "Résultat du tri". col_4 est une colonne d'horodatage si cela fait une différence. Je comprends que ORDER BY ne peut utiliser un index que dans certaines circonstances, mais je suis toujours un peu perplexe quant au moment précis où l'optimiseur le fera.
Vous utilisez
EXPLAIN
sur votre requête (explain select-or-whatever-your-query-is
).possible_keys
montrer ceux qui pourraient être utilisés,key
celui qui est réellement utilisé.la source
explain format=json select ...
est encore plus puissant. Il comprendused_key_parts
, qui vous indique si une clé composite a été utilisée partiellement ou entièrement, etindex_condition
vous indique quelle partie de la requête est responsable de quel index.