2012-09-27 16 views
6

He leído que tener muchos índices en una base de datos puede dañar seriamente el rendimiento, pero en el documento de PostgreSQL no encuentro nada al respecto.¿La velocidad de un SELECT de PostgreSQL se ve negativamente afectada por demasiados índices en la tabla?

Tengo una mesa muy grande con algo así como 100 columnas y mil millones de filas y, a menudo, tengo que hacer muchas búsquedas en muchos campos diferentes.

¿Se reducirá el rendimiento de la tabla de PostgreSQL si agrego muchos índices (quizás 10 índices de columnas únicos y 5 o 7 índices de 3 columnas)?

EDITAR: Con una caída en el rendimiento me refiero al rendimiento en la obtención de filas (seleccionar), la base de datos se actualizará una vez al mes para que la actualización y el tiempo de inserción no sean un problema.

+0

En teoría, el rendimiento de la escritura las acciones a cualquier tabla de RDBMSs caerán ya que en cada escritura los índices necesitan ser mantenidos. En este caso, no tomaría la falta de una nota en la documentación para indicar que no hay una compensación de rendimiento, siempre existe. Como siempre, perfile su aplicación/base de datos para ver el costo exacto de esta compensación. –

+5

[Todo lo que posiblemente desee saber sobre los índices SQL] (http://use-the-index-luke.com/) –

+0

La base de datos se actualizará una vez al mes o algo así, por lo que el rendimiento de inserción o actualización es no muy importante – Topo

Respuesta

6

Los índices se mantienen cuando el contenido de la tabla se ha modificado (es decir INSERT, UPDATE, DELETE)

El planeador de consultas de PostgreSQL puede decidir cuándo utilizar un índice y cuando no es necesario y un recorrido secuencial es más óptimo

Por lo tanto, tener demasiados índices dañará el rendimiento de modificación, no la obtención.

+0

¿Entonces el único intercambio de tener muchos índices es espacio y actualización/tiempo de inserción? – Topo

+0

@Topo Básicamente sí. No esperaría que el planificador se confundiera con demasiados índices :) – dezso

+0

Sí, el planificador de consultas no usará los índices innecesarios. –

1

Los índices tendrán que actualizarse en cada insert y update que implican esas columnas.

0

tengo algunas cartas sobre eso en mi sitio: http://use-the-index-luke.com/sql/dml

Un índice es pura redundancia. Contiene solo datos que también se almacenan en la tabla. Durante las operaciones de escritura, la base de datos debe mantener esas redundancias consistentes. Específicamente, significa que insertar, eliminar y actualizar no solo afectan a la tabla, sino también a los índices que contienen una copia de los datos afectados.

Los títulos de los capítulos sugieren el impacto que los índices pueden tener:

Insertar - no puede tomar beneficio directo de los índices

Eliminar - utiliza los índices de la cláusula where

Actualización - hace no afecta a todos los índices de la tabla

+1

Sería mucho más útil si publicara la parte clave del contenido aquí, con un enlace a su sitio (rechazado) para obtener más información. – PearsonArtPhoto

Cuestiones relacionadas