Antworten:
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 ).
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