viste - update index sql server




Quando mantenere un indice-Analizzando gli stastici di utilizzo dell'indice in SQL Server 2008 (2)

  1. Ecco un buon articolo che va oltre ricerche e scansioni (e indici in generale). Probabilmente farà un lavoro migliore di qualsiasi post SO.
  2. Può essere un po 'una forma d'arte che determina se hai bisogno di un indice o meno. Se questi 88 cercano di prendere query di reporting assolutamente essenziali da un runtime di 3 ore fino a 30 secondi, quindi tenerle. Penso che il primo passo sarebbe quello di capire quali query li stanno utilizzando, quanto gli indici aiutano quelle query e quanto sono importanti tali query.

Snipit dall'articolo (sicuramente dargli una lettura però):

scansioni

Una scansione indice è una lettura completa di tutte le pagine foglia nell'indice. Quando si esegue una scansione dell'indice sull'indice cluster, si tratta di una scansione della tabella in tutto tranne il nome.

Quando una scansione indice viene eseguita dal processore di query, è sempre una lettura completa di tutte le pagine foglia nell'indice, indipendentemente dal fatto che vengano restituite tutte le righe. Non è mai una scansione parziale.

Una scansione non riguarda solo la lettura dei livelli foglia dell'indice, anche le pagine di livello superiore vengono lette come parte della scansione dell'indice.

cerca

Un indice di ricerca è un'operazione in cui SQL utilizza la struttura b-tree per individuare un valore specifico o l'inizio di un intervallo di valori. Affinché un indice possa essere possibile, deve esistere un predicato SARGable3 specificato nella query e un indice di corrispondenza (o parzialmente corrispondente). Un indice di corrispondenza è uno in cui il predicato della query ha utilizzato un sottoinsieme a sinistra delle colonne dell'indice. Questo sarà esaminato in modo molto più dettagliato in una parte 3 di questa serie.

L'operazione di ricerca viene valutata a partire dalla pagina principale. Utilizzando le righe nella pagina principale, il processore di query individuerà quale pagina nel successivo livello inferiore dell'indice contiene la prima riga che si sta cercando. Quindi leggerà quella pagina. Se questo è il livello foglia dell'indice, la ricerca finisce lì. Se non è la foglia, il processore di query identifica nuovamente quale pagina nel successivo livello inferiore contiene il valore specificato. Questo processo continua fino al raggiungimento del livello foglia.

Una volta che il processore di query ha individuato la pagina foglia contenente il valore della chiave specificato o l'inizio dell'intervallo specificato di valori chiave, esso viene letto lungo le pagine foglia finché non sono state restituite tutte le righe corrispondenti al predicato.

Sto facendo un rapporto sull'indice sul mio database MS SQL 2008 (database click destro -> Report -> Statistiche utilizzo indice)

Mi dice che uno dei miei indici utilizza: 88 utenti cercano 0 scansioni utente 6.134.141 aggiornamenti utente

Qualcuno può spiegarmi:

  1. Qual è la differenza tra la ricerca dell'utente e le scansioni dell'utente?
  2. Come devo determinare quando tenere un indice o rilasciarlo a seconda dell'utente cerca + scansioni utente vs aggiornamenti utente?

Penso che in questo caso il costo di mantenere l'indice non ne valga la pena.


Un punto importante da notare in anticipo: le statistiche sull'utilizzo dell'indice vengono reimpostate ogni volta che viene avviato il database. Quindi, è difficile valutare i tuoi 88 tentativi senza sapere quando hai ricominciato l'ultimo. 88 cerca nell'ultima ora è molto diversa da 88 cerca nell'ultimo mese.

  1. Un utente cerca sta cercando una particolare riga o serie di righe nell'indice che corrispondono ai criteri della tua query. Una scansione utente sta leggendo tutte le righe nell'indice. Per ovvi motivi, le operazioni di ricerca sono preferibili rispetto alle operazioni di scansione.
  2. Non sono a conoscenza di linee guida generali che dicono "quando il rapporto ricerca / aggiornamento è X, rilascia l'indice". Osserva il tuo indice in termini di queste Linee guida generali di progettazione e benchmark prima e dopo l'esecuzione delle tue query per determinare l'impatto della caduta dell'indice.






indexing