Além do que Justin Cave escreveu, desde o PostgreSQL 9.1, você pode acelerar qualquer pesquisa com LIKE
( ~~
) ou ILIKE
( ~~*
), além de correspondências básicas de expressões regulares ( ~
). Use as classes de operadores fornecidas pelo módulo pg_trgm com um índice GIN ou GiST para acelerar LIKE
expressões que não estão ancoradas à esquerda. Para instalar a extensão, execute uma vez por banco de dados:
CREATE EXTENSION pg_trgm;
Crie um índice do formulário
CREATE INDEX tbl_col_gin_trgm_idx ON tbl USING gin (col gin_trgm_ops);
Ou:
CREATE INDEX tbl_col_gist_trgm_idx ON tbl USING gist (col gist_trgm_ops);
Criando e mantendo um índice GIN ou GiST acarreta um custo, mas se sua tabela não for muito escrita, esse é um ótimo recurso para você.
Depesz escreveu um excelente artigo em seu blog sobre o novo recurso.
GIN ou GiST?
Essas duas citações do manual devem fornecer algumas orientações
A escolha entre a indexação GiST e GIN depende das características de desempenho relativas do GiST e GIN, que são discutidas em outros lugares. Como regra geral, um índice GIN é mais rápido para pesquisar do que um índice GiST, mas mais lento para compilar ou atualizar; portanto, o GIN é mais adequado para dados estáticos e o GiST para dados atualizados com frequência.
Mas para o tipo de consultas "vizinho mais próximo" com o operador using the distance <->
:
Isso pode ser implementado com eficiência pelos índices GiST, mas não pelos índices GIN.