2010-12-01 43 views
21

Tengo una base de datos de Postgres que tiene 2 columnas que no son claves principales (ni pueden serlo), pero se buscan en un lote y se comparan por igualdad con 2 columnas en otras tablas.¿Cómo determinar qué tipo de índice usar en Postgres?

Creo que este es un caso perfecto para agregar un índice a mis tablas. Nunca he utilizado indexación en una base de datos antes, así que estoy tratando de aprender la forma correcta de hacerlo.

He aprendido que hay varios tipos de indexación que puedo elegir. ¿Cómo determino qué método será el más eficiente para mi base de datos? ¿También sería el método adecuado crear un índice único que cubra ambas columnas?

Respuesta

18

Postgres admite tipos de indexación B-tree, R-tree, Hash, GiST y GIN. La indexación de B-tree es la más común y se ajusta a los escenarios más comunes. Esta es la sintaxis:

CREATE INDEX idex_name ON table_name USING btree(column1, column2); 

Aquí está la documentación createindex y aquí está más información sobre diferentes indextypes en Postgres.

El tipo de índice que debe usar depende del tipo de operaciones que desee realizar. Si simplemente desea verificar la igualdad, entonces el índice de hash es el mejor. Para las operaciones más comunes (por ejemplo, comparación, coincidencia de patrones) se debe usar B-tree. Personalmente, nunca he usado indexación GiST o GIN. CUALQUIER gurú por ahí?

La documentación describe todos estos tipos. Ellos pueden ayudarlo mejor que yo :)

Espero que esto ayude.

+0

gracias, actualicé mis preguntas solo un poco. De hecho, estoy buscando pura igualdad, así que supongo que un índice de hash será el mejor. – Kellenjb

+2

Scratch that, hash no funciona en varias columnas. Supongo que tendré que hacer un poco de experimentación para ver si 2 hashes separados serán más rápidos que 1 solo b-tree – Kellenjb

+11

Generalmente no quiere usar un índice hash. Desde la página 9.1 documentos: "Las operaciones de índice Hash no están actualmente registradas en WAL, por lo que los índices de hash pueden necesitar reconstruirse con REINDEX después de un bloqueo de la base de datos. Tampoco se replican a través de la transmisión o replicación basada en archivos. Por estas razones, hash el uso del índice está actualmente desaconsejado ". –

3

Trate de entender el queryplanner también, porque esta parte de PostgreSQL tiene que trabajar con sus índices. EXPLAIN ANALYZE será esencial para optimizar sus consultas.

Cuestiones relacionadas