Question

Je l'ai dit et être lu partout (mais personne n'a osé expliquer pourquoi) que lors de la composition d'un index sur plusieurs colonnes, je mettrais d'abord la colonne la plus sélective, pour des raisons de performance. Pourquoi donc? Est-ce un mythe?

Était-ce utile?

La solution

  

Je dois mettre la colonne la plus sélective premier

selon Tom , la sélectivité de la colonne n'a pas d'impact de la performance pour les requêtes qui utilisent toutes les colonnes de l'index (il n'affecte la capacité d'Oracle à compresser l'index).

  

il n'est pas la première chose, ce n'est pas la chose la plus importante. Bien sûr, il y a quelque chose à considérer, mais il est relativement loin là-bas dans le grand schéma des choses.

     

Dans certains étranges, des cas très particuliers et anormales (comme ci-dessus avec des données vraiment tout à fait biaisé), la sélectivité pourrait facilement mais la matière, ils sont

     

a) assez rare   b) dépend vraiment sur les valeurs utilisées lors de l'exécution, comme toutes les requêtes sont biaisées

     

en général, regardez les questions que vous avez, essayez de minimiser les indices dont vous avez besoin sur cette base.

     

Le nombre de valeurs distinctes dans une colonne dans un index concaténé est pas pertinent lorsque l'on considère   la position de l'index.

Cependant, ces considérations devraient venir deuxième au moment de décider de l'ordre des colonnes d'index. Plus important est de faire en sorte que l'indice peut être utile à de nombreuses requêtes, de sorte que l'ordre des colonnes doit refléter l'utilisation de ces colonnes (ou l'absence) dans les clauses where de vos requêtes (pour la raison illustrée par AndreKR).

  

COMMENT UTILISER l'indice - qui est ce qui est pertinent au moment de décider

.

Toutes choses étant égales par ailleurs, je encore mis la colonne la plus sélective en premier. Il se sent juste ...

Mise à jour: Une autre citation de Tom (grâce à des milan pour le trouver).

  

Dans Oracle 5 (oui, la version 5!), Il y avait un argument pour placer les colonnes les plus sélectives premier   dans un index.

     

Depuis lors, il est pas vrai que mettre les plus discriminants entrées d'abord dans l'index   fera l'index plus petit ou plus efficace. Il semble que ce sera, mais il ne sera pas.

     

Avec index   compression clé, il y a un argument convaincant pour aller dans l'autre car il peut faire l'index   plus petit. Cependant, il devrait être conduit par la façon dont vous utilisez l'index, comme indiqué précédemment.

Autres conseils

Vous pouvez omettre des colonnes de droite à gauche lors de l'utilisation d'un index, à savoir quand vous avez un index sur col_a, col_b vous pouvez l'utiliser dans WHERE col_a = x mais vous ne pouvez pas l'utiliser dans WHERE col_b = x.

Imaginez avoir un annuaire téléphonique qui est triée par les prénoms et par les noms de famille.

Au moins en Europe et prénoms américains ont une sélectivité beaucoup plus faible que noms de famille, afin de rechercher le premier nom ne serait pas restreindre le jeu de résultats beaucoup, donc il y aurait encore beaucoup de pages pour vérifier le nom dernière correct.

L'ordre des colonnes de l'index doit être déterminé par vos requêtes et ne pas être des considérations de sélectivité. Si vous avez un index sur (a, b, c), et la plupart de vos requêtes de colonne unique sont contre la colonne c, suivi d'un, puis les mettre dans l'ordre de c, a, b dans la définition de l'indice pour la meilleure efficacité . Oracle préfère utiliser la pointe de l'index de la requête, mais peut utiliser d'autres colonnes de l'index dans un chemin d'accès moins efficace connu sous le nom saut-scan.

Le plus sélectif est votre index, le plus rapide est la recherche.

Imaginez simplement un répertoire: vous pouvez trouver quelqu'un pour la plupart rapide par nom. Mais si vous avez beaucoup de personnes avec le même nom, vous durera plus de temps à la recherche de la personne en regardant le chaque firstname.

Donc, vous devez donner les colonnes les plus sélectives tout d'abord d'éviter autant que possible ce problème.

De plus, vous devez alors vous assurer que vos requêtes utilisent correctement ces « critères de sélectivité ».

scroll top