2012-03-21 5 views
6

Tengo la siguiente estructura.¿Hay algún daño al tener un índice duplicado en Postgresql?

CREATE TABLE join_table (
    id integer NOT NULL, 
    col_a integer NOT NULL, 
    col_b integer NOT NULL 
) 

CREATE INDEX index_on_col_a ON join_table USING btree (col_a); 
CREATE INDEX index_on_col_b ON join_table USING btree (col_b); 
CREATE UNIQUE INDEX index_on_col_a_and_col_b ON join_table USING btree (col_a, col_b); 

También hay claves foráneas en col_a y col_b.

Claramente index_on_col_a ya no es necesaria, pero es hay un costo o beneficio para mantener o eliminarlo?

Supongo que sí;

  • mantenimiento que se ralentizará insertos
  • selecciona utilizando sólo col_a puede ser más rápido si lo guardo
+0

Parece que ya sabes la respuesta? – Andomar

+0

hmm ... ¿Debería evitar las preguntas? tal vez alguien tiene algo más firme que una conjetura. –

+1

Depende del caso, Mejor rendimiento de escritura o consulta realizar Pero desde mi opinión personal, necesitamos soltar índice index_on_col_a – francs

Respuesta

6

Usted puede quitar el índice de col_a. PostgreSQL puede usar el índice combinado si consulta en col_a y también puede usar el índice si consulta en col_a y col_b. Estos tipos de consulta pueden utilizar el índice combinado:

WHERE col_a = 'val' 
WHERE col_a = 'val' AND col_b = 'val' 

El índice combinado no puede ser utilizado para consultar solamente col_b o un OR unión de col_a y col_b. Por lo tanto, el índice adicional sobre col_b puede tener sentido si con frecuencia tiene consultas que solo solicitan col_b.

Editar: Entonces: no tiene una ventaja al crear index_on_col_a, pero tiene una velocidad de escritura más lenta. Déjalo caer.

Cuestiones relacionadas