Cours SQL ORACLE – 09 : INDEX
L’index est un objet de la BD qui appartient à une table et qui pointe sur une ou plusieurs colonnes de cette table.
L’index sert à accélérer la recherche dans une table en utilisant les colonnes indexées.
Deux types d’index existent : l’index normal et l’index unique :
- L’index normal :
CREATE INDEX nom_index ON nom_table(colonne 1, colonne 2,..., colonne n);
Imaginons qu’on dispose d’une table des employés (EMP), et on cherche les gens qui ont le JOB ANALYST et SAL de 3000. La requête utilisée sera donc :
SELECT * FROM EMP WHERE JOB = 'ANALYST' AND SAL = 3000;
La requête va parcourir ligne par ligne jusqu’à la fin de la table pour vérifier ces conditions. Cela prendra beaucoup de temps dans le cas ou en dispose d’une importante masse de donnée.
En utilisant un index sur ces deux colonnes, le temps de réponse sera beaucoup moins important. La création de l’index sera donc :
CREATE INDEX id_job_sal ON EMP(JOB, SAL);
- L’index unique :
Même utilité que l’index unique d’autant plus que ce genre d’index vérifie aussi l’unicité des données selon la ou les colonnes indexées.
CREATE UNIQUE INDEX nom_index ON nom_table(colonne 1, colonne 2,..., colonne n);
Par exemple, dans la table employe, on ne peut pas avoir deux personnes qui portent le même nom et prénom. Aussi, on cherche souvent dans cette table des données par nom et prénom. On peut créer donc dans ce cas-là un index unique sur ces deux colonnes :
CREATE UNIQUE INDEX id_nom_prenom ON employe(nom, prenom);
Il faut savoir qu’on peut créer beaucoup d’index sur la même table, mais un seul index sur la même série de colonne.
Pour finir, chaque index prend de la place dans la BD, on peut spécifier le tablespace sur lequel on veut créer l’index. Il ne doit pas forcement être créé sur le même tablespace des tables. Généralement on crée les index dans un tablespace différent de celui des données.
Ci-dessous un exemple de création d’index dans la tablespace IDXTBS :
CREATE UNIQUE INDEX id_nom_prenom ON employe(nom, prenom) tablespace IDXTBS;