J'ai ajouté à la table des index utilisés pour la recherche du résultat. Je montre les résultats par ordre ASC ou DESC. Donc, cette colonne devrait avoir un index ou pas? J'ai 2 autres index sur cette table. Quelle incidence les performances auront-elles sur l'indexation de cette colonne?
mysql
performance
index
order-by
Somnath Muluk
la source
la source
Réponses:
Oui, MySQL peut utiliser un index sur les colonnes de ORDER BY (sous certaines conditions). Cependant, MySQL ne peut pas utiliser d’index pour un ASC mixte , DESC order by by (
SELECT * FROM foo ORDER BY bar ASC, pants DESC
). Partager votre requête et votre instruction CREATE TABLE nous aiderait à répondre plus précisément à votre question.Pour 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
Modifier 21/01/2012 à 8h53
Il y avait des questions sur la source de ma déclaration sur l'utilisation d'un index avec une combinaison ASC / DESC dans ORDER BY. Dans la documentation d' optimisation ORDER BY :
De plus, le mot clé DESC n'a pas de sens dans CREATE INDEX
la source
CREATE INDEX idx_foo ON foo(bar ASC, pants DESC);
devrait marcher.ASC
etDESC
si l'INDEX
a le même mélange.Pour ceux qui s’interrogent sur la réponse à PostgreSQL, la réponse est oui, un index sera utilisé. Selon la documentation de PostgreSQL, le planificateur de requêtes "envisagera de satisfaire à une spécification ORDER BY soit en analysant un index disponible correspondant à la spécification, soit en analysant la table dans un ordre physique et en effectuant un tri explicite". Cela signifie que s’il existe un index que le planificateur peut utiliser, il le fera en revenant à faire un tri après avoir récupéré les lignes correspondantes.
la source