In che modo gli indici influiscono sulle prestazioni delle query?


12

Ovviamente mantenere diversi indici diversi ha un impatto negativo sulle prestazioni di inserimento ed eliminazione. Che ne dici di prestazioni delle query: ha senso tenere troppi indici su una tabella? Le prestazioni della query miglioreranno in ogni caso con l'aggiunta di un indice (ovviamente per le query che utilizzano l'indice) o è possibile che le prestazioni della query degradino con troppi indici perché diventa necessario consultare tutti gli indici per ottenere il risultato?

Nel caso in cui ci siano diversi indici su una tabella: saranno tutti considerati, o solo i migliori dal punto di vista dell'ottimizzatore? Oracle implementa indici multidimensionali?


2
perché non lo provi e riferisci con i tuoi risultati? :)
Neil McGuigan

Lo farò domani :)
paweloque,

2
Gli indici non rallentano necessariamente le eliminazioni, ma possono anche accelerarle (proprio come gli aggiornamenti possono sfruttare un indice)
a_horse_with_no_name

@el capo che senso ha reinventare la ruota? quindi sì, l'effetto delle prestazioni della query è in questione, anche se sappiamo con certezza che gli inserimenti / eliminazioni sarebbero interessati. Che ne dici di aggiornamenti? saranno influenzati negativamente?
Sangram,

Risposte:


15

Ci vorrà un po 'più di tempo per generare il piano quando ci saranno più indici da considerare, ma dubito che la differenza sarebbe misurabile in modo significativo. I motivi per la caduta di un indice non elencano le prestazioni della query. D'altra parte, in generale non è necessario creare indici a meno che non si sappia che verranno utilizzati per rendere una query più efficiente.

Dalla Guida ai concetti di Oracle , ecco i criteri per la creazione di un indice.

In generale, considerare la creazione di un indice su una colonna in una delle seguenti situazioni:

  • Le colonne indicizzate vengono interrogate frequentemente e restituiscono una piccola percentuale del numero totale di righe nella tabella.

  • Esiste un vincolo di integrità referenziale sulla colonna o sulle colonne indicizzate. L'indice è un mezzo per evitare un blocco completo della tabella che sarebbe altrimenti necessario se si aggiorna la chiave primaria della tabella padre, si unisce alla tabella padre o si elimina dalla tabella padre.

  • Un vincolo chiave univoco verrà inserito nella tabella e si desidera specificare manualmente l'indice e tutte le opzioni di indice.

Tutti gli indici verranno considerati nel senso che tutti gli indici sulle tabelle nella query vengono esaminati per determinare se possono essere utilizzati. Quelli che potrebbero essere ulteriormente esaminati per determinare l'utilità.


7

Finché le tue statistiche sono aggiornate, l'ottimizzatore basato sui costi dovrebbe prendere decisioni sensate su quali indici utilizzare. In caso contrario, è il momento di usare i suggerimenti . Non consulterà mai un indice su una colonna non necessaria per soddisfare la query.


0

L'ho trovato nella Selezione di un indice Strategia della Guida per gli sviluppatori di applicazioni . Quella pagina riguarda "la selezione di una strategia di indice":

Limitare il numero di indici per ogni tabella

Più indici, maggiore è il sovraccarico quando la tabella viene modificata. Quando le righe vengono inserite o eliminate, tutti gli indici sulla tabella devono essere aggiornati. Quando una colonna viene aggiornata, tutti gli indici sulla colonna devono essere aggiornati.

È necessario valutare il vantaggio in termini di prestazioni degli indici per le query rispetto al sovraccarico di prestazioni degli aggiornamenti. Ad esempio, se una tabella è principalmente di sola lettura, è possibile utilizzare più indici; ma, se una tabella viene fortemente aggiornata, è possibile utilizzare un numero inferiore di indici.


2
Dalla domanda: "Ovviamente mantenere diversi indici diversi ha un impatto negativo sulle prestazioni di inserimento ed eliminazione. Che ne dici di prestazioni delle query"
Jack dice che prova topanswers.xyz il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.