SQL Tips & Tricks, ottimizzazione degli indici

Senza indici nessun database si “muoverebbe” perché la ricerca delle informazioni sarebbe troppo lenta. Per fare un esempio pensate all’elenco telefonico di una grande città, ma stampato in ordine sparso. Una ricerca costerebbe la lettura dell’intero elenco! Gli indici mantengono l’ordine dei dati nel database ed ogni tabella può avere più di un indice.

Tuttavia gli indici necessitano di manutenzione e soprattutto possono essere ottimizzati: eliminando quelli non necessari, aggiungendo quelli mancanti.

Per ogni indice creato e mai utilizzato:

  • Aumentano le dimensioni del database (per quanto possa essere modesto l’elenco ordinato consuma spazio)
  • Aumentano i tempi di scrittura (dopo ogni INSERT/UPDATE il database deve aggiornare l’indice)

Per ogni indice mancante:

  • Il database è costretto all’intera scansione della tabella per la ricerca del dato, aumentando notevolmente i tempi di risposta

Vediamo quindi come trovare gli indici mancanti in SQL Server:

Il risultato è una lista di tabelle / campi che necessiterebbero di un indice, ordinata per frequenza di utilizzo (e quindi maggiore importanza):

IndexList2

Il primo indice mancante (nr. 189) ha richiesto oltre 204 scansioni di tabella con un impatto negativo sulle performance del 90%. L’indice va creato con i campi nell’ordine indicato (“Type”, “Tax Liable”, “VAT Bus_ Posting Group”…) per una questione di granularità / selettività. Compaiono infatti ai primi posti i campi cercati per uguaglianza (più rapidi) e solo dopo quelli per “diverso da”. I campi INCLUDE vanno esclusi dall’indice (sono normali lookup al dato tramite chiave primaria) ma danno indicazioni importanti sull’uso della tabella ai fini dell’ottimizzazione complessiva.

Gli indici in eccesso si trovano invece con questa query:

Anche in questo caso il risultato è una lista, ma degli indici esistenti e con le loro statistiche di utilizzo:

IndexList3

Nell’esempio, gli indici sulla prima tabella (dal $3 al $15) possono tranquillamente essere rimossi. Infatti a fronte delle scritture non c’è mai alcuna lettura, rallentando inutilmente il database durante gli aggiornamenti.

 

Chiama subito per maggiori informazioni +39 0113473770
oppure lasciaci i tuoi recapiti e sarai contattato il prima possibile:



 

 

Lascia un commento