Documentation PostgreSQL 8.0.25 | ||||
---|---|---|---|---|
Pr�c�dent | Arri�re rapide | Chapitre 11. Index | Avance rapide | Suivant |
Une d�finition d'index peut indiquer une classe d'op�rateurs pour chaque colonne de l'index.
CREATE INDEX name ON table (column opclass [, ...]);
La classe d'op�rateurs identifie les op�rateurs que l'index doit utiliser sur cette colonne. Par exemple, un index B-tree sur une colonne de type int4 utiliserait la classe int4_ops; Cette classe d'op�rateurs comprend des fonctions de comparaison pour les valeurs de type int4. En pratique, la classe d'op�rateurs par d�faut pour le type de donn�es de la colonne est g�n�ralement suffisant. Les classes d'op�rateurs sont utiles pour certains types de donn�es, pour lesquels il pourrait y avoir plus d'un comportement utile de l'index. Par exemple, nous pourrions vouloir trier une donn�e de type nombre complexe soit par sa valeur absolue, soit par sa partie enti�re. Nous pourrions le faire en d�finissant deux classes d'op�rateurs pour ce type de donn�es et en s�lectionnant la bonne classe en cr�ant l'index.
Il y a quelques classes d'op�rateurs en plus des classes par d�faut:
Les classes d'op�rateurs text_pattern_ops, varchar_pattern_ops, bpchar_pattern_ops, et name_pattern_ops supportent les index B-tree sur les types text, varchar, char, et name, respectivement. La diff�rence avec les classes d'op�rateurs ordinaires est que les valeurs sont compar�es strictement caract�re par caract�re plut�t que suivant les r�gles de tri sp�cifiques � la localisation. Cela rend ces index utilisables pour des requ�tes qui utilisent des recherches sur des motifs (LIKE ou des expressions r�guli�res POSIX) si le serveur n'utilise pas la localisation standard <<�C�>>. Par exemple, on pourrait indexer une colonne varchar comme ceci:
CREATE INDEX test_index ON test_table (col varchar_pattern_ops);
Si vous utilisez la localisation C, vous pouvez � la place cr�er un index avec la classe d'op�rateurs par d�faut, qui sera utilisable pour les recherches de motifs. Notez aussi qu'il faut cr�er un index avec la classe d'op�rateurs par d�faut si vous voulez que les requ�tes qui utilisent une comparaison ordinaire utilisent un index. De telles requ�tes ne peuvent pas utiliser les classes d'op�rateurs xxx_pattern_ops. Il est possible de cr�er plusieurs index sur la m�me colonne avec diff�rentes classes d'op�rateurs.
Les requ�tes suivantes montrent toutes les classes d'op�rateurs pr�d�finies:
SELECT am.amname AS index_method, opc.opcname AS opclass_name FROM pg_am am, pg_opclass opc WHERE opc.opcamid = am.oid ORDER BY index_method, opclass_name;
Elle peut �tre �tendue pour montrer tous les op�rateurs inclus dans chaque classe:
SELECT am.amname AS index_method, opc.opcname AS opclass_name, opr.oprname AS opclass_operator FROM pg_am am, pg_opclass opc, pg_amop amop, pg_operator opr WHERE opc.opcamid = am.oid AND amop.amopclaid = opc.oid AND amop.amopopr = opr.oid ORDER BY index_method, opclass_name, opclass_operator;
Pr�c�dent | Sommaire | Suivant |
Index sur des expressions | Niveau sup�rieur | Index partiels |