Frage zum nicht gruppierten Index mit enthaltenen Spalten (DB - MS SQL Server). Ich habe den Blog Optimized Non-Clustered Index Maintenance gelesen, der Informationen zu Abfrageplänen enthält, wenn Aktualisierungsanweisungen ausgeführt werden und Clustered Index und Non Clustered Index für die Tabelle definiert sind.
Ich habe Fragen zu nicht gruppierten Indizes mit eingeschlossenen Spalten. Ich beziehe mich auf dasselbe Beispiel von Blogger
CREATE TABLE T (PK INT, A INT, B INT, C INT, D INT, E INT)
CREATE UNIQUE CLUSTERED INDEX TPK ON T(PK)
CREATE INDEX TB ON T(B)
CREATE INDEX TCD ON T(C,D)
CREATE INDEX TE ON T(E)
- Dies ist ein neuer nicht gruppierter Index mit enthaltenen Spalten
CREATE INDEX TF ON T(E) INCLUDE(A)
INSERT T VALUES(0, 10, 20, 30, 40, 50)
UPDATE T SET A = 19
Wenn kein Index-TF definiert ist, wird nur eine Aktualisierung des Clustered-Index durchgeführt, und es werden keine nicht gruppierten Index-Einfüge- und Löschvorgänge ausgeführt. Aber was passiert, wenn TF definiert ist?
TF
hat Indexid von 5 und seineleaf_update_count = 1
(das war als Antwort auf frühere Version des Kommentars). Und ja, das hätte ich für eine enthaltene Kolumne erwartet. Das Löschen / Einfügen erfolgt im Allgemeinen, wenn Sie eine Schlüsselspalte aktualisieren, da sie dann möglicherweise verschoben werden muss. zB versuchenUPDATE T SET E = 25
leaf_ghost_count
. Aufzeichnungen werden zuerst als Geister markiert und später bereinigt.Genau wie beim Aktualisieren eines Werts in einem Index, der auf Blatt- und Nichtblattseiten gespeichert ist, werden alle diese Seiten mit dem neuen Wert aktualisiert. Spalten, die nur über include auf Blattebene gespeichert werden, werden aktualisiert, wenn Sie Werte aktualisieren. Dies kann auch zu Spage Splits führen.
quelle
Wenn TF definiert ist, muss es aktualisiert werden. Dies liegt daran, dass der Wert von A auf der TF-Blattebene enthalten ist. Eine Aktualisierung in Spalte A muss diesen Wert im Index TF widerspiegeln.
Dies ist der Grund, warum Sie einen Include-Index TF haben, damit Sie nicht nach A suchen müssen, wenn Sie nur die Spalten E oder A benötigen.
quelle