web-dev-qa-db-fra.com

L'ordre par colonne doit avoir un index ou non?

J'ai ajouté des index à la table qui sont utilisés pour rechercher le résultat. Je montre les résultats par ordre ASC ou DESC. Donc, cette colonne devrait avoir un index ou non? J'ai 2 index de plus sur cette table. Comment les performances affecteront-elles la création ou non d'indexation dans cette colonne?

38
Somnath Muluk

Oui, MySQL peut utiliser un index sur les colonnes dans ORDER BY (sous certaines conditions). Cependant, MySQL ne peut pas utiliser d'index pour mixte ASC, DESC par (SELECT * FROM foo ORDER BY bar ASC, pants DESC). Le partage de votre requête et de la déclaration CREATE TABLE nous aiderait à répondre plus spécifiquement à votre question.

Pour obtenir des conseils sur la façon d'optimiser les clauses ORDER BY: http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html

Editer le 2012-01-21 8:53 AM

Il y avait des questions sur la source de ma déclaration sur l'utilisation d'un index avec ASC/DESC mixte dans ORDER BY. De la documentation ORDER BY Optimization :

Dans certains cas, MySQL ne peut pas utiliser d'index pour résoudre ORDER BY, bien qu'il utilise toujours des index pour rechercher les lignes qui correspondent à la clause WHERE. Ces cas sont les suivants:

...

Vous mélangez ASC et DESC:

SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;

...

De plus, le mot clé DESC est sans signification dans CREATE INDEX

Une spécification index_col_name peut se terminer par ASC ou DESC. Ces mots clés sont autorisés pour les extensions futures afin de spécifier le stockage de valeur d'index croissant ou décroissant. Actuellement, ils sont analysés mais ignorés; les valeurs d'index sont toujours stockées dans l'ordre croissant.

29
Aaron Brown

Pour quiconque s'interroge sur la réponse en ce qui concerne PostgreSQL, la réponse est oui, un index sera utilisé. Selon la documentation PostgreSQL le planificateur de requêtes "envisagera de satisfaire une spécification ORDER BY soit en scannant un index disponible qui correspond à la spécification, soit en scannant la table dans l'ordre physique et en faisant un tri explicite." Cela signifie que s'il existe un index que le planificateur peut utiliser, il le fera, revenant à faire un tri après avoir récupéré les lignes correspondantes.

6
douglasr