Risposte:
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 interroghi 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. Questi tipi di cose sono le "statistiche" e sono individuali per ciascun database - anche due database con identica tabella e struttura di indici avranno statistiche diverse.
In breve, 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 giusto percorso dei 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 ovviamente sbagliato (ad esempio, scegliendo FTS quando sai che un indice sarebbe meglio).
Sono utilizzati da 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 l' aggiornamento periodico : lascia il motore DB per fare le sue cose