Sí, el beneficio se produce cuando desea consultar una parte del índice. Si coloca los predicados parcialmente utilizados primero, el índice puede usarse para consultas que involucren esos predicados pero no todas las columnas del índice.
Además, a menos que tenga otros requisitos, puede ayudar poner primero los predicados más selectivos, ya que esto puede reducir las operaciones de búsqueda de índice más rápido.
En su caso, IDX_2
no es necesariamente redundante dependiendo de la naturaleza de las consultas en la tabla. Sin embargo, puede no ser necesario incluir todas las columnas. Si, por ejemplo, hace muchas consultas location
y date
luego IDX_2
puede ser útil para ayudar a resolver esas consultas, ya IDX_1
que no está en el orden correcto para ser útil para eso. Sin embargo, item
es posible que encuentre que es redundante IDX_2
.
A partir del 9i, Oracle introdujo un operador de 'omisión de escaneo' donde las columnas de índice finales pueden consultarse de manera más eficiente, lo que puede reducir la necesidad de índices suplementarios de este tipo.
En un caso más específico, si está consultando item
por location
y date
y no necesita ninguna otra columna, entonces la consulta podría resolverse completamente a través del índice sin tener que leer nada de la tabla. También puede crear índices de cobertura que tengan columnas no indexadas adjuntas. Si todas las columnas necesarias se pueden resolver desde el índice de cobertura, la consulta no necesita tocar la tabla principal.
Finalmente, en respuesta a su última pregunta: si tiene un conjunto de consultas usadas regularmente que están utilizando muchos recursos y podrían ajustarse utilizando un índice, entonces vale la pena considerarlo. Sin embargo, el mantenimiento de los índices conlleva una sobrecarga en las inserciones, por lo que tendrá que intercambiar el rendimiento de la consulta con la sobrecarga que los índices colocan en las operaciones de inserción o actualización.
Otra cosa a tener en cuenta son las columnas con muchos valores nulos.
Si estas columnas tienen columnas especificadas después de ellas en el índice, los valores nulos deben indexarse. De lo contrario, como de costumbre, los valores nulos no se indexan (por supuesto, esto supone que está utilizando un índice b-tree).
Por lo tanto, si tiene columnas con una gran cantidad de valores nulos, colocarlas al final del índice puede ahorrarle una cantidad significativa de espacio en disco.
fuente