it-swarm.it

Che cosa sono le statistiche del database e come posso trarne vantaggio?

Ho sentito parlare delle statistiche che SQL Server mantiene per impostazione predefinita. Cosa stanno monitorando e come posso usare queste informazioni per migliorare il mio database?

18
goric

Le statistiche sono semplicemente una forma di metadati dinamici che aiutano l'ottimizzatore di query a prendere decisioni migliori. Ad esempio, se ci sono solo una dozzina di righe in una tabella, allora non ha senso andare a un indice per fare una ricerca; starai sempre meglio facendo una scansione della tabella completa. Ma se quella stessa tabella cresce fino a un milione di righe, probabilmente starai meglio usando l'indice. Ma se esegui una query su quella tabella su una colonna che ha solo pochi valori univoci (ad esempio potrebbe essere una colonna "sesso" contenente solo "M" o "F"), in realtà un FTS potrebbe essere migliore di quel caso perché è necessario recuperare comunque il blocco per creare il set di risultati. Ora supponiamo che la tua tabella sia al 99% "M" e solo all'1% "F", dovremmo FTS in un caso o usare un indice nell'altro. Stessa tabella, stessa query, potenzialmente quattro piani di query diversi a seconda del contenuto della tabella. Questo tipo di cose sono le "statistiche" e sono individuali per ogni database - anche due database con identica struttura di tabelle e indici avranno statistiche diverse.

In sintesi, in un moderno motore di database ci sono due tipi di ottimizzazione delle query: riscrivere l'SQL (ottimizzazione basata su regole, come un compilatore riscrive la tua C per renderla più efficiente) e scegliere il percorso giusto i dati (ottimizzazione basata sui costi , come un compilatore JIT che identifica gli hotspot in fase di esecuzione). Devi preoccuparti di questo solo se noti che Query Optimizer sta facendo qualcosa di evidentemente sbagliato (ad esempio, scegliendo FTS quando sai un indice sarebbe meglio).

21
Gaius

Sono tilizzati dal Query Optimizer (white paper su MSDN) per tenere traccia della distribuzione dei valori negli indici e/o nelle colonne.

La tua unica preoccupazione dovrebbe essere aggiorna regolarmente : lascia il motore DB per fare le sue cose

5
gbn