Ich habe einige sehr große Tabellen in meiner Datenbank, aber ein wesentlicher Teil dieser Daten ist "alt".
Aufgrund von Umständen, die außerhalb meiner Kontrolle liegen, darf ich diese "alten" Daten nicht entfernen. Die andere Einschränkung besteht darin, dass ich die Datenbank nicht ändern kann, dh Dateigruppen hinzufügen kann. So wie die Dinge jetzt stehen, befindet sich alles in der PRIMARY
Dateigruppe.
Ich dachte daran, diese Tabellen in einige Partitionen zu unterteilen, wie "neu", "alt", "archiviert" und ähnliches. Ich habe eine "Status" -Spalte, die ich für diesen Zweck verwenden möchte.
Angesichts des beschriebenen Szenarios und der Einschränkungen habe ich mich gefragt, ob eine Partitionierung hier sinnvoll ist. Mit anderen Worten, wenn meine Tabelle auf diese Weise partitioniert ist, sich aber alle Partitionen in derselben Dateigruppe befinden, ist SQL Server intelligent genug, um den speziellen Bereich in der zugrunde liegenden Datei zu finden, in dem sich meine "neuen" Daten befinden, und berührt nicht die Bereich mit "alten" Daten?
Anders ausgedrückt, wenn beispielsweise 80% meiner Daten "alt" sind. Verfügt SQL Server über einen Mechanismus, um den Zugriff auf 100% der zugrunde liegenden Dateien zu vermeiden und nur auf 20% zuzugreifen, die "neue" Daten enthalten (vorausgesetzt natürlich, ich gebe meine Partitionierungsspalte in der WHERE
Klausel der Abfragen an).
Ich denke, um dies zu beantworten, müsste man verstehen, wie die Partitionierung intern implementiert wird. Ich schätze alle Hinweise.
quelle
Die Antwort ist ja". Es gibt einen Mechanismus für jede Abfrage, der Eingaben basierend auf der Logik filtert, die zum Definieren der Partitionen verwendet wird.
Sie müssen jedoch über den entsprechenden Filter verfügen, sonst wird die gesamte Partition gescannt. Dies beinhaltet normalerweise Datumsfilter (in Ihrem Fall), um die Partition auszuwählen.
Eine Möglichkeit, dies zu erzwingen, besteht darin, Ansichten zu haben, die nur auf eine Partition zugreifen, mit der richtigen Logik in der Ansicht.
quelle