Documentation PostgreSQL 8.0.25 | ||||
---|---|---|---|---|
Pr�c�dent | Arri�re rapide | Chapitre 11. Index | Avance rapide | Suivant |
Une colonne d'index ne correspond pas n�cessairement exactement � une colonne de la table associ�e, mais peut �tre une fonction ou une expression scalaire calcul�e � partir d'une ou plusieurs colonnes de la table. Cette fonctionnalit� est utile pour obtenir un acc�s rapide aux tables bas� sur les r�sultat des calculs.
Par exemple, une fa�on classique de faire des comparaisons ind�pendantes
de la casse est d'utiliser la fonction lower
:
SELECT * FROM test1 WHERE lower(col1) = 'value';
Si un index a �t� d�fini sur le r�sultat de lower(col1), cette requ�te peut l'utiliser. Cet index est cr�� avec la commande:
CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1));
Si nous avions d�clar� cet index UNIQUE, il emp�cherait la cr�ation de lignes dont la valeur de la colonne col1 ne diff�re que par la casse. Ainsi, les index sur les expressions peuvent �tre utilis�s pour v�rifier des contraintes qui ne peuvent �tres d�finies avec une simple contrainte.
Un autre exemple, si vous faites souvent des requ�tes comme celle-ci:
SELECT * FROM people WHERE (first_name || ' ' || last_name) = 'John Smith';
alors il peut �tre utile de cr�er un index comme celui-ci:
CREATE INDEX people_names ON people ((first_name || ' ' || last_name));
La syntaxe de la commande CREATE INDEX n�cessite normalement de mettre des parenth�ses autour de l'expression index�s, comme dans l'exemple pr�c�dent. Les parenth�ses peuvent �tre omises quand l'expression est juste un appel de fonction, comme dans le premier exemple.
Les expressions d'index sont relativement co�teuses � calculer, car l'expression doit �tre recalcul�e � chaque insertion ou mise � jour de chaque ligne. C'est pourquoi les index bas�s sur des expressions ne doivent �tre utilis�s que quand les requ�tes qui les ex�cutent sont tr�s fr�quentes.
Pr�c�dent | Sommaire | Suivant |
Index Uniques | Niveau sup�rieur | Classes d'Op�rateurs |