Ich habe das Privileg, eine große partitionierte OLAP-Tabelle zu verwalten. Beim Überprüfen dieser Tabelle habe ich festgestellt, dass einer der Indizes nicht mit dem Partitionierungsschema übereinstimmt. Da der Autor nicht verfügbar ist und sorgfältig gestaltete Google-Suchanfragen keine nützlichen Ergebnisse geliefert haben, bin ich mir nicht sicher, ob dies beabsichtigt oder versehentlich war.
Gibt es einen Grund, einen Index für SQL Server 2008 nicht partitionieren zu lassen?
Antworten:
Der Hauptvorteil der nicht Partitionieren einen (nicht eindeutigen) Index auf einem partitionierten Basisobjekt ist , dass es sich um eine arbeitet seit langem bestehenden Abfrage - Optimierer Einschränkung in Bezug auf geordnete Datenanforderungen wie
MIN
,MAX
oderTOP (n)
Abfragen.Auf einem partitionierten Index kann das Optimierungsprogramm im Allgemeinen nicht übersetzen
MIN
,MAX
oderTOP (n)
auf den gleichen Betrieb pro Partition , gefolgt von einem abschließenden globalen Aggregate über die pro-Partition Teilaggregate. Das Optimierungsprogramm wählt stattdessen einen Ausführungsplan aus, der alle Partitionen des Index durchsucht. Die Ausnahme hiervon ist der Einzelfall, in dem die Aggregat- oder Top-Operation über der Partitionierungsspalte angegeben wird.Ich sollte erwähnen, dass es auch sehr gute Gründe gibt, keine nicht ausgerichteten Indizes zu haben. Die Wahl eines nicht ausgerichteten Index müsste eine sehr informierte Entscheidung sein. Ich habe es in der Vergangenheit (selten) selbst gemacht, aber unter ganz bestimmten Umständen, bei denen der Nutzen die Kosten deutlich überwog oder es keine andere vernünftige Alternative gab.
Artikel von Itzik Ben-Gan zur Erläuterung des Problems.
quelle
Es gibt das offensichtliche Problem bei einigen Einschränkungen (z. B. eindeutig), die einen nicht ausgerichteten Index erfordern .
Abgesehen davon haben die nicht ausgerichteten Indizes hohe Kosten (in erster Linie verhindern sie, dass viele parallele Operatoren Thread pro Partition ausführen, und die Alternativen sind speicherintensiv), und daher würde ich dringend von solchen Indizes abraten. Selbst bei den von Paul aufgeführten Fällen würde ich immer noch von nicht ausgerichteten Indizes abraten.
quelle
Nicht ausgerichtete Indizes negieren den Hauptvorteil der Partitionierung, bei der Partitionen gewechselt werden. Wenn Sie nicht davon abhängig sind und aus anderen Gründen partitionieren (anderer Speicher, schreibgeschützte Partitionen, inkrementelle Statistiken usw.), erstellen Sie einen nicht ausgerichteten Indexex.
Nicht ausgerichtete Indizes sind nützlich, da Sie damit eindeutige Einschränkungen für die gesamte Tabelle erzwingen können. Für nicht ausgerichtete Indizes muss der Partitionierungsschlüssel kein implizites Suchpräfix sein. Stellen Sie sich vor, Sie haben 10000 Partitionen und Abfragen, die nicht auf dem Partitionierungsschlüssel basieren. Der Ausführungsplan muss dann nach 10000 Partitionen suchen, wenn der Index ausgerichtet wurde. Die anderen Antworten haben weitere Beispiele.
quelle