Ich möchte eine Rowstore-Tabelle in eine Columnstore-Tabelle konvertieren, indem ich einen Clustered Columnstore-Index erstelle. Die Tabelle enthält drei Spalten: ID, Zeit und Wert.
Die Tabelle wird nach ID und Uhrzeit sortiert, bevor ein Spaltenspeicherindex erstellt wird. Nach dem Erstellen des Columnstore-Index wird die Zeilenreihenfolge jedoch durcheinander gebracht. Ich dachte, es könnte an der Parallelität liegen und fügte die maxdop = 1
Option hinzu , aber das hat das Problem nicht behoben. Kann mir jemand dabei helfen?
Hier ist der Code zum Erstellen von Tabellen und Indizes:
-- creating rowstore table
drop table if exists tab1_rstore
select id, time, value
into tab1_rstore
from tab0
order by id_loan, period
option(maxdop 1)
-- creating clustered index on rowstore table
create clustered index idx on tab1_rstore (id,time)
-- creating columnstore table
select *
into tab1_cstore
from tab1_rstore
option(maxdop 1)
-- comparing the first two rows from these two tables
select top 2 *
from tab1_rstore
select top 2 *
from tab1_cstore
Der Screenshot der Abfrageergebnisse:
-- creating clustered columnstore index
create clustered columnstore index idx on tab1_cstore
with (maxdop = 1)
-- comparing the top two rows again
select top 2 *
from tab1_rstore
select top 2 *
from tab1_cstore
Der Screenshot der Abfrageergebnisse mit Columnstore-Index:
Mein Verständnis ist, dass die Reihenfolge der Zeilen durch den Komprimierungsalgorithmus bestimmt wird und wir nichts dagegen tun können. Siehe die Einschränkung und Einschränkung im Dokument hier mit dem folgenden Zitat:
Die ASC- oder DESC-Schlüsselwörter zum Sortieren des Index können nicht enthalten sein. Columnstore-Indizes werden gemäß den Komprimierungsalgorithmen geordnet. Durch das Sortieren würden viele der Leistungsvorteile beseitigt.
Ich verwende SQL Server 2016 Developer Edition unter Windows 10 64-Bit.