web-dev-qa-db-fra.com

Comment les indices ont-ils d'impact sur la performance de la requête?

Il est évident que garder plusieurs indices différents a un impact négatif sur l'insertion et la suppression des performances. Que diriez-vous de la performance de la requête: a-t-il de sens que de garder trop d'indices sur une table? La performance de la requête s'améliorera-t-il dans tous les cas avec un indice ajouté (bien sûr pour les requêtes à l'aide de l'indice du tout) ou est-il même possible que la performance de la requête se dégrade avec trop d'index, car il devient nécessaire de consulter tous les indices pour obtenir le résultat?

Au cas où il y a des indices différents sur une table: seront-ils tous pris en compte, ou seulement le meilleur du point de vue de l'optimiseur? Oracle met-elle en œuvre des indices multidimensionnels?

12
paweloque

Il faudra légèrement plus longtemps pour générer le plan lorsqu'il y a plus d'index à prendre en compte, mais je doute que la différence serait considérablement significative. Les raisons de la chute d'un index ne répertorient pas la performance de la requête. D'autre part, vous ne devriez pas créer d'index à moins que vous sachiez qu'ils seront utilisés pour faire une requête plus efficace.

À partir du Oracle Concepts Guide , voici les critères de création d'un index.

En général, envisagez de créer un index sur une colonne dans l'une des situations suivantes:

  • Les colonnes indexées sont interrogées fréquemment et renvoient un faible pourcentage du nombre total de lignes dans la table.

  • Une contrainte d'intégrité référentielle existe sur la colonne ou les colonnes indexées. L'indice est un moyen d'éviter une serrure de table complète qui serait autrement requise si vous mettez à jour la clé primaire de la table parent, fusionnez-vous dans la table des parents ou supprimez de la table des parents.

  • Une contrainte clé unique sera placée sur la table et vous souhaitez spécifier manuellement l'index et toutes les options d'index.

Tous les index seront considérés en ce sens que tous les index des tableaux de la requête sont examinés pour déterminer s'ils pourraient être utilisés. Ceux qui pourraient être examinés plus en détail pour déterminer l'utilité.

15
Leigh Riffel

Tant que vos statistiques sont à jour, l'optimiseur basé sur les coûts devrait prendre des décisions judicieuses quant aux indices à utiliser. Si ce n'est pas le cas, c'est le moment d'utiliser astuces . Il ne consultera jamais un index sur une colonne qui n'est pas nécessaire pour satisfaire la requête.

7
Gaius

J'ai trouvé cela dans le Sélection d'une stratégie d'index du Guide du développeur d'applications. Cette page concerne "Sélection d'une stratégie d'index":

limiter le nombre d'index pour chaque table

Plus d'index, plus les frais généraux sont engagés lorsque la table est modifiée. Lorsque des lignes sont insérées ou supprimées, tous les index de la table doivent être mis à jour. Lorsqu'une colonne est mise à jour, tous les index de la colonne doivent être mis à jour.

Vous devez peser l'avantage de la performance des index des requêtes contre la surcharge de performance des mises à jour. Par exemple, si une table est principalement en lecture seule, vous pouvez utiliser plus d'index; Mais si une table est fortement mise à jour, vous pouvez utiliser moins d'index.

0
Sangram