2009-12-03 10 views
15

Solo una pregunta simple, pero ¿importa el orden de su índice cuando se extiende por múltiples columnas?Orden del índice en múltiples columnas

Por ejemplo, tomando la consulta:

 
SELECT * FROM my_table WHERE (column_1 = 1 AND column_2 = 2) 

Si quiero añadir un índice para una consulta como esta, ¿importa si se crea mi índice de esta manera:

 
CREATE INDEX my_index 
ON my_table (column_1, column_2) 

O como este:

 
CREATE INDEX my_index 
ON my_table (column_2, column_1) 

¡Gracias por la ayuda!

Respuesta

21

En el ejemplo que das, el orden de las columnas no es importante.

Importa si pides en una columna; un índice en (col1,col2) se puede usar para ORDER BY col1, col2 pero no para ORDER BY col2, col1.

Para WHERE cláusulas, un índice en (col1, col2) funciona para WHERE col1 = 1 AND col2 = 1. También funciona para WHERE col1 = 1. Pero no puede ayudar con WHERE col2 = 1.

+4

En realidad, puede importar incluso en este caso. Si casi cada fila tiene col1 = 1, lo más probable es que el índice funcione mejor si col2 fuera el primero, incluso cuando esté consultando ambos. –

+3

También podría importar en el ejemplo proporcionado, si una columna tiene una elesctividad significativamente más alta que la otra. Ponga columnas con alta selectividad (muchos valores diferentes) primero. – Manu

+0

Excelente información en esta respuesta para ayudar a comprender cómo acceder a los índices que ya están disponibles en un sistema. – Swoop

0

La mejor manera de averiguarlo es medirlo. Pruebe uno, mida el rendimiento, luego elimine ese índice y pruebe el otro. Normalmente desea que los datos que se consultan juntos se encuentren juntos en el índice del disco, y el orden de las columnas en el índice hace una diferencia en la forma en que se almacena el índice en el disco. Es muy difícil adivinar exactamente qué combinación de índices funcionará mejor, así que pruebe algunas posibilidades diferentes y mida para descubrir cuál es la mejor para sus datos.

Cuestiones relacionadas