it-swarm-eu.dev

Was sind Datenbankstatistiken und wie kann ich davon profitieren?

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

18
goric

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 gehen, um eine Suche durchzuführen. Sie sind immer besser dran, wenn Sie einen vollständigen Tabellenscan durchführen. Wenn dieselbe Tabelle jedoch auf eine Million Zeilen anwächst, ist es wahrscheinlich besser, den Index zu verwenden. Wenn Sie diese Tabelle jedoch in einer Spalte abfragen, die nur sehr wenige eindeutige Werte enthält (z. B. eine "Geschlecht" -Spalte, die nur "M" oder "F" enthält), ist ein FTS möglicherweise besser als dieser Fall, weil Sie dies tun würden Sie müssen den Block trotzdem abrufen, um die Ergebnismenge zu erstellen. Angenommen, Ihre Tabelle ist 99% "M" und nur 1% "F". In einem Fall sollten wir FTS verwenden 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 - selbst zwei Datenbanken mit identischer Tabellen- und Indexstruktur haben unterschiedliche Statistiken.

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

21
Gaius

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

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

5
gbn