Oracle Database
Index
Recherche…
Introduction
Ici, je vais expliquer différents indices en utilisant l'exemple, comment l'index augmente les performances des requêtes, comment l'index diminue les performances DML, etc.
index b-tree
CREATE INDEX ord_customer_ix ON orders (customer_id);
Par défaut, si nous ne mentionnons rien, oracle crée un index en tant qu’index b-tree. Mais nous devrions savoir quand l'utiliser. L'index B-tree stocke les données sous forme d'arborescence binaire. Comme nous le savons, index est un objet de schéma qui stocke une sorte d'entrée pour chaque valeur de la colonne indexée. Ainsi, chaque fois qu'une recherche est effectuée sur ces colonnes, elle vérifie dans l'index l'emplacement exact de cet enregistrement pour y accéder rapidement. Quelques points sur l'indexation:
- Pour rechercher une entrée dans l'index, une sorte d'algorithme de recherche binaire est utilisé.
- Lorsque la cardinalité des données est élevée, l' index b-tree est parfait.
- Index rend DML lente, pour chaque enregistrement, il doit y avoir une entrée dans l'index pour la colonne indexée.
- Donc, si ce n'est pas nécessaire, nous devrions éviter de créer un index.
Index de bitmap
CREATE BITMAP INDEX
emp_bitmap_idx
ON index_demo (gender);
- L'index bitmap est utilisé lorsque la cardinalité des données est faible.
- Ici, le genre a une valeur avec une faible cardinalité. Les valeurs peuvent être masculines, féminines et autres.
- Donc, si nous créons un arbre binaire pour ces 3 valeurs lors de la recherche, cela aura un cheminement inutile.
- Dans les structures bitmap, un tableau à deux dimensions est créé avec une colonne pour chaque ligne de la table indexée. Chaque colonne représente une valeur distincte dans l'index bitmap. Ce tableau à deux dimensions représente chaque valeur de l'index multipliée par le nombre de lignes de la table.
- Au moment de la récupération des lignes, Oracle décompresse le bitmap dans les tampons de données RAM afin de pouvoir effectuer rapidement une analyse pour rechercher les valeurs correspondantes. Ces valeurs correspondantes sont fournies à Oracle sous la forme d'une liste ID de ligne et ces valeurs ID de ligne peuvent accéder directement aux informations requises.
Index basé sur la fonction
CREATE INDEX first_name_idx ON user_data (UPPER(first_name));
SELECT *
FROM user_data
WHERE UPPER(first_name) = 'JOHN2';
- Indicateur basé sur la fonction, créant un index basé sur une fonction.
- Si dans la recherche (clause where), une fonction est fréquemment utilisée, il est préférable de créer un index basé sur cette fonction.
- Ici, dans l'exemple, pour la recherche, la fonction Upper () est utilisée. Il est donc préférable de créer un index en utilisant la fonction supérieure.
Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow