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

Come e quando vengono utilizzati gli indici nelle operazioni INSERT e UPDATE?

Per le istruzioni UPDATE, l'indice può essere utilizzato dall'ottimizzatore se ritiene che l'indice possa accelerarlo. L'indice verrebbe utilizzato per individuare le righe da aggiornare. L'indice è anche una tabella in un certo senso, quindi se la colonna indicizzata viene aggiornata, ovviamente è necessario AGGIORNARE anche l'indice. D'altra parte, se stai eseguendo un aggiornamento senza una clausola WHERE, l'ottimizzatore potrebbe scegliere di non utilizzare un indice poiché deve accedere all'intera tabella, una scansione completa della tabella potrebbe essere più efficiente (ma potrebbe comunque dover aggiornare l'indice ). L'ottimizzatore prende tali decisioni in fase di esecuzione in base a diversi parametri, ad esempio se esistono statistiche valide rispetto alle tabelle e agli indici in questione, quanti dati sono interessati, che tipo di hardware, ecc.

Per le istruzioni INSERT sebbene l'INSERT stesso non abbia bisogno dell'indice, anche l'indice dovrà essere "inserito in", quindi sarà necessario accedervi da Oracle. Un altro caso in cui INSERT può causare l'utilizzo dell'indice è un INSERT come questo:

INSERT INTO mytable (mycolmn)
SELECT mycolumn + 10 FROM mytable;