sql >> Base de Datos >  >> RDS >> Oracle

Oracle:índice único de varias columnas o dos índices de una sola columna

Depende...

Es bastante improbable que un índice solo en column1 será beneficioso si ya tiene un índice compuesto en column1, column2 . Desde column1 es el índice principal, consulta en la tabla que tiene solo column1 como predicado podrá utilizar el índice compuesto. Si ejecuta consultas con frecuencia que necesitan realizar un análisis completo del índice y la presencia de column2 aumenta sustancialmente el tamaño del índice, es posible que un índice en solo column1 sería más eficiente ya que el escaneo de índice completo necesitaría hacer menos E/S. Pero esa es una situación bastante inusual.

Un índice en solo column2 puede ser beneficioso si algunas de sus consultas en la tabla especifican predicados solo en column2 . Si hay relativamente pocos valores distintos de column1 , es posible que Oracle pueda realizar un escaneo de omisión de índice utilizando el índice compuesto para satisfacer las consultas que solo especifican column2 como predicado. Pero es probable que un escaneo salteado sea mucho menos eficiente que un escaneo de rango, por lo que es bastante probable que un índice solo en column2 beneficiaría esas consultas. Si hay una gran cantidad de valores distintos para column1 , el escaneo salteado sería aún menos eficiente y un índice solo en column2 sería más beneficioso. Por supuesto, si nunca consulta la tabla usando column2 sin especificar también un predicado en column1 , no necesitaría un índice solo en column2 .