A definição do índice pode especificar uma classe de operadores para cada coluna do índice.
CREATE INDEX nome ON tabela (coluna classe_de_operadores [, ...]);
A classe de operadores identifica os operadores a serem utilizados pelo índice para esta coluna. Por exemplo, um índice B-tree no tipo int4 utiliza a classe int4_ops; esta classe de operadores inclui funções de comparação para valores do tipo int4. Na prática, a classe de operadores padrão para o tipo de dado da coluna é normalmente suficiente. O ponto principal de existir classes de operadores é que, para alguns tipos de dado, pode haver mais de um comportamento do índice que faça sentido. Por exemplo, pode-se desejar ordenar o tipo de dado do número complexo tanto pelo valor absoluto quanto pela parte real, o que pode ser feito definindo duas classes de operadores para o tipo de dado e, depois, selecionando a classe apropriada ao definir o índice.
Existem, também, algumas classes de operadores nativas além das classes padrão:
As classes de operadores text_pattern_ops, varchar_pattern_ops, bpchar_pattern_ops e name_pattern_ops dão suporte a índices B-tree nos tipos text, varchar, char e name, respectivamente. A diferença com relação às classes de operadores comuns, é que os valores são comparados estritamente caractere por caractere, em vez de seguir as regras de intercalação (collation [1] [2] [3] [4] ) específicas do idioma. Isto torna estas classes de operadores adequadas para serem usadas em comandos envolvendo expressões de correspondência com padrão (expressões regulares LIKE ou POSIX) se o servidor não usar o idioma "C" padrão. Como exemplo, uma coluna varchar pode ser indexada da seguinte forma:
CREATE INDEX idx_teste ON tbl_teste (col varchar_pattern_ops);
Se for utilizado o idioma C, em vez disso pode ser criado um índice com a classe de operadores padrão, e ainda assim será útil para comandos com correspondência com padrão. Deve ser observado, também, que deve ser criado um índice com a classe de operadores padrão se for desejado que consultas envolvendo comparações comuns utilizem um índice. Estas consultas não podem utilizar a classe de operadores xxx_pattern_ops. Podem ser criados vários índices na mesma coluna com classes de operadores diferentes.
A consulta a seguir mostra todas as classes de operadores definidas:
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;
Podendo ser estendida para mostrar todos os operadores incluídos em cada 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;
[1] |
collation; collating sequence — Um método para comparar duas cadeias de caracteres comparáveis. Todo conjunto de caracteres possui seu collation padrão. (Second Informal Review Draft) ISO/IEC 9075:1992, Database Language SQL- July 30, 1992. (N. do T.) |
[2] |
SQL Server — intercalação (collation) — é um conjunto de regras que determina como os dados são comparados, ordenados e apresentados. Os dados caractere são classificados de acordo com a informação de intercalação, que inclui o idioma, a ordem de classificação e a diferenciação de letras minúsculas e maiúsculas. SQL Server 2005 Books Online — Glossary of Terms (N. do T.) |
[3] |
collation é uma classificação apropriada para o idioma. Collation (N. do T.) |
[4] |
collation — [informática, computadores] — s. intercalação, f. collation | Portuguese | Dictionary & Translation by Babylon (N. do T.) |