Quel est l'impact des indices sur les performances des requêtes?

12

Évidemment, conserver plusieurs indices différents a un impact négatif sur les performances d'insertion et de suppression. Qu'en est-il des performances des requêtes: est-il logique de conserver trop d'indices sur une table? Les performances des requêtes s'amélioreront-elles dans tous les cas avec l'ajout d'un index (bien sûr pour les requêtes utilisant l'index du tout) ou est-il même possible que les performances de la requête se dégradent avec trop d'index car il devient nécessaire de consulter tous les index pour obtenir le résultat?

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

paweloque
la source
2
pourquoi ne testez-vous pas cela et ne faites-vous pas rapport de vos résultats? :)
Neil McGuigan
Je ferai demain :)
paweloque
2
Les index ne ralentissent pas nécessairement les suppressions, ils peuvent aussi les accélérer (tout comme les mises à jour peuvent profiter d'un index)
a_horse_with_no_name
@el chef, à quoi bon réinventer la roue? donc oui, l'effet de performance de la requête est en question bien que nous sachions avec certitude que les insertions / suppressions seraient affectées. Et les mises à jour? seront-ils affectés négativement?
Sangram

Réponses:

15

Il faudra un peu plus de temps pour générer le plan lorsqu'il y aura plus d'indices à prendre en compte, mais je doute que la différence soit significativement significative. Les raisons de la suppression d'un index ne répertorient pas les performances des requêtes. D'un autre côté, en général, vous ne devez pas créer d'index sauf si vous savez qu'ils seront utilisés pour rendre une requête plus efficace.

Dans le manuel 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 fréquemment interrogées et renvoient un petit pourcentage du nombre total de lignes de la table.

  • Une contrainte d'intégrité référentielle existe sur la ou les colonnes indexées. L'index est un moyen d'éviter un verrou de table complet qui serait autrement requis si vous mettez à jour la clé primaire de la table parent, fusionnez dans la table parent ou supprimez de la table parent.

  • Une contrainte de 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 dans le sens où tous les index des tables de la requête sont examinés pour déterminer s'ils peuvent être utilisés. Celles qui pourraient l'être sont examinées plus avant pour déterminer leur utilité.

Leigh Riffel
la source
7

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

Gaius
la source
0

J'ai trouvé dans la sélection d' un indice de stratégie du Guide de l' Application Developer . Cette page concerne la «sélection d'une stratégie d'index»:

Limitez le nombre d'index pour chaque table

Plus il y a d'index, plus les frais généraux sont élevé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 évaluer les performances des index pour les requêtes par rapport à la surcharge de performances 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.

Sangram
la source
2
De la question: "Évidemment, la conservation de plusieurs indices différents a un impact négatif sur les performances d'insertion et de suppression. Que diriez-vous des performances des requêtes"
Jack dit: essayez topanswers.xyz