Gibt es einen Vorteil, wenn ein Index nicht partitioniert wird?

9

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?

Robin
quelle
1
Möglicherweise. Fragen Sie die Verwendung Ihrer Indexstatistik ab, um festzustellen, ob dieser Index verwendet wird. Verwenden Sie in diesem Fall erweiterte Ereignisse oder eine serverseitige Ablaufverfolgung, um zu erfassen, welche Abfragen diesen Index treffen. Wenn sie bei einem partitionierten Index besser abschneiden würden, wäre das großartig. Wenn nicht, überprüfen Sie, ob tatsächlich nicht ausgerichtete partitionierte Indizes benötigt werden. Wenn dies nicht der Fall ist, würde ich sagen, dass die Partition sowieso ausgerichtet ist, da zukünftige Abfragen davon profitieren können. Wenn die Kosten / der Aufwand / der Ausfall zu hoch sind, tun Sie dies natürlich nicht.
Ali Razeghi
Nach dem, was ich als Best Practice für die Indizierung einer partitionierten Tabelle gelesen habe, ist es, den Index an dem Partitionierungsschema auszurichten. Diese spezielle Tabelle hat mich zu dem Gedanken gebracht, dass ich einen Anwendungsfall verstehen möchte, um einen Index nicht am Partitionsschema auszurichten. Ich versuche nicht, ein bestimmtes Problem zu lösen, daher habe ich keine Abfrage, die analysiert werden muss.
Robin
Ein weiterer Grund für das Entwerfen eines nicht ausgerichteten Index ist ein eindeutiger Index (einschließlich Primärschlüssel oder eindeutiger Einschränkung), der die Partitionierungsspalte nicht enthält. In diesem Fall darf der Index überhaupt nicht partitioniert oder mit einer anderen Funktion / einem anderen Schema partitioniert werden.
Dan Guzman

Antworten:

11

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, MAXoder TOP (n)Abfragen.

Auf einem partitionierten Index kann das Optimierungsprogramm im Allgemeinen nicht übersetzen MIN, MAXoder TOP (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.

Paul White 9
quelle
3

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.

Remus Rusanu
quelle
1
Ja. Die Wahl eines nicht ausgerichteten Index müsste eine sehr informierte Wahl sein. Ich habe es in der Vergangenheit (selten) selbst gemacht, aber unter ganz bestimmten Umständen, bei denen der Nutzen die Kosten überwog.
Paul White 9
2

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.

usr
quelle