2012-01-19 23 views
7

Soy un novato en postgres. Tengo una columna llamada host (cadena varchar2) en una tabla que tiene alrededor de 20 millones de filas. ¿Cómo uso la indexación para optimizar mi búsqueda y encontrar un host particular? Además, esta columna se actualizará diariamente. ¿Necesito escribir la indexación de activación en un intervalo particular? Si es así, ¿cómo hago eso? (Para Records estoy usando Ruby y Rails 3)Indexación de Postgres?

Respuesta

7

Suponiendo que estás haciendo coincidencias exactas, sólo debe ser capaz de crear el índice y dejarlo:

CREATE INDEX host_index ON table_name (host) 

El optimizador de consultas solo debe utilizar ese automáticamente.

Es posible que desee especificar otras opciones, como la intercalación a usar.

Consulte el PostgreSQL docs for CREATE INDEX para obtener más información.

+0

así que no necesito escribir el disparador? ¿Se actualizará la indexación a medida que se actualicen mis registros? –

+2

La indexación se actualiza mientras se actualizan sus registros. La regla general es que cualquier índice acelera la recuperación, pero ralentiza la actualización de la información. Así que tenga cuidado al seleccionar la estructura del índice, esto podría afectar dramáticamente el rendimiento de las actualizaciones. – J0HN

0

Sugiero usar BRIN Index desde su introducción de PostgreSQL 9.5 en lugar del índice btree convencional.

0

Para la búsqueda de texto, se recomienda utilizar los tipos de índice GIN o GiST.

https://www.postgresql.org/docs/9.5/static/textsearch-indexes.html

Otra posibilidad es que si sólo estuviera realizando coincidencia exacta en la columna de la host, es decir, no hay comparaciones de desigualdad (>, <) y la concordancia parcial (like, comodín) que participan, es posible considerar la conversión host a un número entero de hash para acelerar la búsqueda significativamente.