Además de lo que escribió Justin Cave, desde PostgreSQL 9.1 puede acelerar cualquier búsqueda con LIKE
( ~~
) o ILIKE
( ~~*
), y también coincidencias básicas de expresiones regulares ( ~
). Utilice las clases de operador proporcionadas por el módulo pg_trgm con un índice GIN o GiST para acelerar las LIKE
expresiones que no están ancladas a la izquierda. Para instalar la extensión, ejecute una vez por base de datos:
CREATE EXTENSION pg_trgm;
Crear un índice del formulario
CREATE INDEX tbl_col_gin_trgm_idx ON tbl USING gin (col gin_trgm_ops);
O:
CREATE INDEX tbl_col_gist_trgm_idx ON tbl USING gist (col gist_trgm_ops);
Crear y mantener un índice GIN o GiST conlleva un costo, pero si su tabla no está muy escrita, esta es una gran característica para usted.
Depesz ha escrito un excelente artículo en su blog sobre la nueva característica.
GIN o GiST?
Estas dos citas del manual deberían proporcionar alguna orientación
La elección entre la indexación GiST y GIN depende de las características de rendimiento relativo de GiST y GIN, que se analizan en otra parte. Como regla general, un índice GIN es más rápido de buscar que un índice GiST, pero más lento de construir o actualizar; por lo tanto, GIN es más adecuado para datos estáticos y GiST para datos actualizados a menudo.
Pero para el tipo de consultas "vecino más cercano" con el uso del operador de distancia <->
:
Esto puede implementarse de manera bastante eficiente por los índices GiST, pero no por los índices GIN.