2012-03-28 15 views
4

Einer der Vorteile eines columnstore-Indexes ist, dass die Daten einer einzelnen Spalte "nebeneinander auf Datenträger" gespeichert werden. Dies steht für eine bessere Komprimierung und schnellere Lesezeiten.SQL Server 2012: Leistung columnstore index vs B-Struktur

Jedoch; Wenn Sie einen B-Baum (einen regulären nicht gruppierten Index) verwenden, sind nicht die Blätter dieses Baums die Daten selbst? Wenn ich also einen Index für Spalte A anlege, werden dann nicht alle Felder von Spalte A auf der Platte parallel zur Tabelle sortiert angezeigt? Dies würde bedeuten, dass die Daten komprimiert werden könnten und schnell gelesen werden könnten.

Also kurz gesagt: Wann genau ist ein columnstore-index leistungsfähiger als ein B-Baum auf einer einzelnen Spalte?

Vielen Dank im Voraus!

Antwort

1

Also, wenn ich einen Index für Spalte A mache, werden nicht alle Felder der Spalte A sortiert auf der Platte parallel zur Tabelle erscheinen?

Ja, Spalte A wird sortiert. Aber alle anderen Spalten nicht. Ein Spaltenspeicherindex speichert alle Spalten in sortierter Reihenfolge (in Blöcken von 2^20 Zeilen).

+0

Ok. Aber wenn Sie etwas aus Spalte A auswählen, werden in jedem Fall alle Daten von A sortiert. Kann ich also davon ausgehen, dass ein columnstore-index effizienter ist, wenn auch andere Spalten abgefragt werden? Aber was, wenn ich einfach einen B-Baum auf diese Spalten auch stelle? – Gurdt

+0

Wenn Sie die Daten sortiert benötigen, benötigt ein B-Tree überhaupt keine Sortieroperation (wenn die angeforderten Spalten ein Präfix des Indexes sind). Ein Spaltenspeicher kann sie nicht sortiert bereitstellen, da sie sie in 2^20 Zeilen gespeichert speichert. Wenn Sie mehrere solcher Segmente haben, kann die Sortierreihenfolge nicht angegeben werden. – usr

+0

Ich denke, dass es hier einige Missverständnisse geben könnte. Der Zweck eines Columnstore-Index ist (oder so denke ich), dass es beim Lesen von Daten von der Platte weniger Aufwand gibt, weil nur relevante Spalten geladen werden können. Beim Laden von einem Zeilenspeicher werden Zeilen in einem Ganzen abgerufen, wodurch Spalten geladen werden, die möglicherweise nicht benötigt werden. Der Fall ist jetzt der folgende: Wenn ich nur an einer Spalte interessiert bin, sagen Sie A, wie kann ein Columnstore-Index leistungsfähiger sein, im Gegensatz zu einem einfachen B-Baum (Nonclustered-Index). Die Blätter eines nicht gruppierten Index werden tatsächlich als eine Spalte, Feld nach Feld, kompakt wie möglich gespeichert. – Gurdt