Comment puis-je optimiser cette requête?
Vous pouvez faire un index couvrant:
CREATE INDEX ix_table1_456__123 ON table1 (col4, col5, col6) INCLUDE (col1, col2, col3)
et la requête aura même pas de faire une recherche de table. Si j'ajoute des index pour chaque colonne de la clause where, est-ce que cela ferait une différence?
Cela améliorera probablement la requête par rapport à ne pas avoir d'index du tout, mais la création de l'index composite avec couverture sera probablement meilleure.
Cependant, si chacune de vos colonnes a une cardinalité élevée (c'est-à-dire UNIQUE
ou proche), la création d'index individuels peut même améliorer la requête par rapport à l'index composite.
Ceci est particulièrement vrai si certaines des colonnes sont de grande taille (comme un VARCHAR(400)
) et une autre, petite colonne a une grande cardinalité.
Si j'ai 10 colonnes dans la clause where, est-ce que toutes ces 10 colonnes devraient avoir un index?
Si vous avez 10
colonnes, il y a, comme je l'ai dit plus haut, un compromis entre la taille de clé accrue (qui dégrade la performance) et une sélectivité accrue.
Si, par exemple, les premières colonnes 3
sont uniques ou presque uniques, l'ajout des colonnes supplémentaires n'augmentera pas la sélectivité mais augmentera la taille de la clé.
La taille de l'index augmentera, ce qui nécessitera plus de temps pour y effectuer une recherche.
Vous ne devez pas créer l'index sur toutes les colonnes 10
si les colonnes 3
offrent une sélectivité suffisamment élevée, car parcourir un index plus grand sera plus coûteux que lire des clés supplémentaires.
Vous pouvez lire cet article dans mon blog:
Index fonctionne comme par magie !! Merci .... mais juste curieux, y at-il d'autres moyens que nous pouvons utiliser pour rendre une telle requête plus rapide? – Bhaskar
@Bhaskar: Oui, vous pouvez aller plus loin. Analysez le plan d'exécution pour voir ce qui prend le plus de temps. L'index le plus efficace dépend des données contenues dans la table et de la quantité modifiée. Si vous avez beaucoup d'insertions/mises à jour/suppressions dans la table, vous devez vérifier la fragmentation de l'index et spécifier un facteur de remplissage si l'index a tendance à être fragmenté. – Guffa