Hoje Seven Databases in Seven Weeks me apresentou aos índices por operador.
Você pode indexar strings para padrões correspondentes às consultas anteriores criando um
text_pattern_ops
índice de classe de operador, desde que os valores sejam indexados em letras minúsculas.
CREATE INDEX moves_title_pattern ON movies (
(lower(title) text_pattern_ops);
Usamos o
text_pattern_ops
porque o título é do tipo texto. Se você precisar indexar varchars, chars ou nomes, use as operações relacionadas:varchar_pattern_ops
,bpchar_pattern_ops
ename_pattern_ops
.
Achei o exemplo muito confuso. Por que é útil fazer isso?
Se a coluna for do tipo texto, os outros tipos (varchar, char, name) não seriam convertidos em texto antes de serem usados como um valor de pesquisa?
Como esse índice se comporta de maneira diferente de um que usa o operador padrão?
CREATE INDEX moves_title_pattern ON movies (lower(title));
A documentação muitas vezes lhe dá uma resposta a essas perguntas. Como neste caso também:
A documentação continua dizendo:
Você pode verificar sua localidade da seguinte forma (é provável que seja UTF8 em vez de "C"):