2009-06-19 8 views

Répondre

5

Google est mon meilleur ami:

http://www.orafaq.com/node/926

Le point principal de cet article est:

If 2 indexes (I1 and I2) exist for a table and 
    the number of columns in Index I1 is less or equal to the number of column in index I2 and 
    index I1 has the same columns in the same order as leading columns of index I2 
Then 
    If index I1 is UNIQUE then 
     If index I2 is used to support Foregh Key or for Index Overload then 
     Do Nothing 
     Else 
     Index I2 can be DROPPED 
     End If 
    Else 
     Index I1 can be DROPPED 
    End If 
End If 

Et je Suis d'accord avec ça! En fait, effectuez une recherche sur "doublons les index" dans Google afin d'avoir un type de réponse différent.

+1

C'est probablement juste dans la plupart des cas, mais voir ma réponse pour quand il pourrait être faux de laisser tomber l'index chevauchant. –

1

Le deuxième index est en quelque sorte redondant - toute opération qui utilise Index2 pourrait utiliser Index 1. De plus, les écritures seront légèrement plus lentes car il existe un autre index à mettre à jour. Cela dit, Index2 n'est pas entièrement redondant car il pourrait être un peu plus rapide car l'indice lui-même sera probablement significativement plus petit.

1

Il est possible que, si vos statistiques sont obsolètes, l'optimiseur choisisse l'index 2 lorsque l'index 1 est nécessaire. (Une allusion à l'optimiseur résoudrait, bien sûr.)

2

Le deuxième index est différent et n'est pas redondant en soi.

Que diriez-vous cette requête:

SELECT DISTINCT ColA FROM TABLE WHERE ColA IS NOT NULL; 

Oracle peut répondre à cette question tout à fait de l'index 2. Maintenant, l'indice 2 serait devrait être de petite taille (moins de blocs) que l'indice 1. Cela signifie, il est meilleur index pour la requête ci-dessus.

Si votre application n'obtient jamais une requête mieux adaptée à Index2 qu'Index1, elle est redondante pour votre application.

Les index sont toujours un compromis de performance. Lorsqu'un insert, une mise à jour ou une suppression est effectuée, il y a un travail supplémentaire à faire pour maintenir chaque index supplémentaire.

Est-ce plus que compensé par l'augmentation des performances fournies par l'index? Cela dépend de votre application et de l'utilisation des données.

Questions connexes