Was sind Datenbankstatistiken und wie kann ich davon profitieren?


18

Ich habe gehört, dass Statistiken erwähnt werden, die von SQL Server standardmäßig gespeichert werden. Was verfolgen sie und wie kann ich diese Informationen verwenden, um meine Datenbank zu verbessern?

Antworten:


21

Statistiken sind einfach eine Form dynamischer Metadaten, die dem Abfrageoptimierer helfen, bessere Entscheidungen zu treffen. Wenn eine Tabelle beispielsweise nur ein Dutzend Zeilen enthält, macht es keinen Sinn, zu einem Index zu wechseln, um eine Suche durchzuführen. Sie werden immer besser dran sein, einen vollständigen Tabellenscan durchzuführen. Wenn dieselbe Tabelle jedoch auf eine Million Zeilen anwächst, ist es wahrscheinlich besser, den Index zu verwenden. Aber wenn Sie diese Tabelle in einer Spalte abfragen, die nur sehr wenige eindeutige Werte enthält (z. B. eine "sex" -Spalte, die nur "M" oder "F" enthält), ist ein FTS möglicherweise besser als dieser Fall, weil Sie dies tun würden müssen den Block trotzdem abrufen, um die Ergebnismenge zu erstellen. Angenommen, Ihre Tabelle hat 99% "M" und nur 1% "F", dann sollten wir in einem Fall FTS oder in dem anderen einen Index verwenden. Gleiche Tabelle, gleiche Abfrage, Möglicherweise vier verschiedene Abfragepläne, abhängig vom Inhalt der Tabelle. Diese Art von Dingen sind die "Statistiken" und sie sind für jede Datenbank individuell - sogar zwei Datenbanken mit identischer Tabellen- und Indexstruktur haben unterschiedliche Statistiken.

Zusammenfassend gibt es in einer modernen Datenbank-Engine zwei Arten der Abfrageoptimierung: Umschreiben des SQL (regelbasierte Optimierung, wie ein Compiler Ihr C umschreibt, um es effizienter zu gestalten) und Auswählen des richtigen Pfads für die Daten (kostenbasierte Optimierung) (wie ein JIT-Compiler, der zur Laufzeit Hotspots identifiziert). Sie brauchen sich darüber nur Gedanken zu machen, wenn Sie feststellen, dass das Abfrageoptimierungsprogramm etwas offensichtlich Falsches tut (z. B. wenn Sie wissen, dass ein Index besser ist, wählen Sie FTS ).


2
+1 Ich hätte es nicht besser erklären können. Es ist wichtig zu wissen, dass Statistiken nur dann hilfreich sind, wenn sie auf dem neuesten Stand sind. Dies kann mit der automatischen Aktualisierung der Statistiken oder einem regelmäßig geplanten (nächtlichen / wöchentlichen) Befehl zur Aktualisierung der Statistiken erfolgen. Außerdem wird bei Indexneuerstellungen automatisch eine Statistikaktualisierung durchgeführt.
Matt M

5

Sie werden vom Abfrageoptimierer (Whitepaper zu MSDN) verwendet, um die Verteilung von Werten in Indizes und / oder Spalten zu verfolgen.

Ihr einziges Anliegen sollte es sein, regelmäßig zu aktualisieren : Lassen Sie die DB-Engine einfach stehen, um ihre Aufgaben zu erledigen


2
Nicht immer. Manchmal kann das manuelle Erstellen einer Statistik die Abfrageleistung verbessern.
Mrdenny

@mrdenny: Wie oft hast du das im wirklichen Leben getan? Sehr selten. Ich habe kein IIRC. Wenn es Statistiken braucht, könnte man argumentieren, dass es einen Index braucht, der sowieso Statistiken hat. Sie können nur Spaltenstatistiken gemäß CREATE STATISTICS erstellen . Angesichts der Tatsache, dass OP nach Statistiken fragen musste, würde ich sagen, dass dies eine faire Sache ist.
24.01.11

1
Ich habe es ein paar Mal gemacht, aber nicht oft. Ich habe gegen deine Aussage verstoßen, dass es nur darum gehen sollte, regelmäßig zu aktualisieren, da die Aktualisierung von Statistiken nicht das einzige ist.
Mrdenny
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.