Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle:indice multicolonna singolo o due indici colonna singola

Dipende...

È abbastanza improbabile che un indice sia solo su column1 sarà utile se hai già un indice composito su column1, column2 . Da column1 è l'indice principale, interroga la tabella che ha solo column1 come predicato sarà in grado di utilizzare l'indice composito. Se esegui frequentemente query che richiedono una scansione completa dell'indice e la presenza di column2 aumenta notevolmente la dimensione dell'indice, è possibile che un indice sia solo su column1 sarebbe più efficiente poiché la scansione completa dell'indice richiederebbe meno I/O. Ma questa è una situazione piuttosto insolita.

Un indice solo su column2 può essere utile se alcune delle tue query sulla tabella specificano predicati solo su column2 . Se ci sono relativamente pochi valori distinti di column1 , è possibile che Oracle possa eseguire una scansione di salto dell'indice utilizzando l'indice composito per soddisfare le query che specificano solo column2 come predicato. Ma è probabile che una scansione con salto sia molto meno efficiente di una scansione con intervallo, quindi è ragionevolmente probabile che un indice solo su column2 gioverebbe a quelle domande. Se è presente un numero elevato di valori distinti per column1 , la scansione di salto sarebbe ancora meno efficiente e un indice solo su column2 sarebbe più vantaggioso. Ovviamente, se non esegui mai query sulla tabella utilizzando column2 senza specificare anche un predicato su column1 , non avresti bisogno di un indice solo su column2 .