Tengo una tabla con un índice de varias columnas, y tengo dudas sobre la clasificación adecuada de los índices para obtener el máximo rendimiento en las consultas.
El escenario:
PostgreSQL 8.4, tabla con aproximadamente un millón de filas
Los valores en la columna c1 pueden tener aproximadamente 100 valores diferentes . Podemos suponer que los valores están distribuidos uniformemente, por lo que tenemos alrededor de 10000 filas para cada valor posible.
La columna c2 puede tener 1000 valores diferentes . Tenemos 1000 filas para cada valor posible.
Al buscar datos, la condición siempre incluye valores para estas dos columnas, por lo que la tabla tiene un índice de varias columnas que combina c1 y c2. He leído sobre la importancia de ordenar correctamente las columnas en un índice de varias columnas si tiene consultas utilizando solo una columna para el filtrado. Este no es el caso en nuestro escenario.
Mi pregunta es esta:
Dado el hecho de que uno de los filtros selecciona un conjunto de datos mucho más pequeño, ¿podría mejorar el rendimiento si el primer índice es el más selectivo (el que permite un conjunto más pequeño)? Nunca había considerado esta pregunta hasta que vi los gráficos del artículo referenciado:
Imagen tomada del artículo referenciado sobre índices de varias columnas .
Las consultas usan valores de las dos columnas para el filtrado. No tengo consultas usando solo una columna para filtrar. Todos ellos son: WHERE c1=@ParameterA AND c2=@ParameterB
. También hay condiciones como esta:WHERE c1 = "abc" AND c2 LIKE "ab%"