web-dev-qa-db-fra.com

Comment puis-je dire si un index est utilisé pour trier dans MySQL?

J'ai une requête avec une commande par clause 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 que la requête supérieure à 99% du temps est consacrée à l'état "Résultat de tri". Col_4 est une colonne d'horodatage si cela fait toute différence. Je comprends que l'ordre ne peut utiliser qu'un index dans certaines circonstances, mais je suis toujours un peu mystifié quant à précisément lorsque l'optimiseur le ferait.

10
Chris Cooper

Vous utilisez EXPLAIN sur votre requête (explain select-or-whatever-your-query-is).

possible_keys montrer celles qui pourraient être utilisées, key celui utilisé réellement.

1
sjas