it-swarm-eu.dev

Co jsou statistiky databáze a jak z nich mohu těžit?

Slyšel jsem zmínku o statistikách, které SQL Server ve výchozím stavu uchovává. Co sledují a jak mohu tyto informace použít ke zlepšení své databáze?

18
goric

Statistiky jsou jednoduše formou dynamických metadat, která pomáhají optimalizátoru dotazů při lepším rozhodování. Například, pokud jsou v tabulce pouze desítky řádků, pak nemá smysl hledat index; vždy bude lepší udělat skenování v plné tabulce. Pokud však stejná tabulka naroste na milion řádků, pravděpodobně budete mít lepší index pomocí indexu. Ale pokud dotazujete tuto tabulku na sloupec, který má jen velmi málo jedinečných hodnot (např. Může to být sloupec „sex“ obsahující pouze „M“ nebo „F“), ve skutečnosti může být FTS v tom případě lepší, protože byste je třeba znovu načíst blok k vytvoření sady výsledků. Nyní řekněte, že vaše tabulka je 99% "M" a pouze 1% "F", měli bychom FTS v jednom případě nebo použít index v druhém. Stejná tabulka, stejný dotaz, případně čtyři různé plány dotazů v závislosti na obsahu tabulky. Jedná se o „statistiky“ a jsou individuální pro každou databázi - i dvě databáze se stejnou tabulkou a strukturou indexů budou mít odlišné statistiky.

Stručně řečeno, v moderním databázovém stroji existují dva druhy optimalizace dotazů: přepisování SQL (optimalizace založená na pravidlech, jako kompilátor přepisuje váš C, aby byl efektivnější) a volba správné cesty k datům (optimalizace založená na nákladech) , jako kompilátor JIT identifikující hotspoty za běhu). Toho se musíte starat pouze tehdy, když zjistíte, že optimalizátor dotazů dělá něco zjevně špatného (např. Výběr FTS, když víte index by byl lepší).

21
Gaius

Jsou to používá optimalizátor dotazů (whitepaper na MSDN) ke sledování distribuce hodnot v indexech a/nebo sloupcích.

Vaše obavy by měly být pravidelně aktualizovat : stačí nechat DB engine dělat své věci

5
gbn