Sollte ich vor oder nach dem Hinzufügen des Primärschlüssels eine Komprimierung auf Seitenebene hinzufügen?

14

Situation

  • Data Warehouse auf SQL Server 2008 Enterprise
  • Über 36 Millionen Zeilenhaufen (nicht fragen) mit über 60 Spalten
  • 750k monatlich hinzugefügt
  • Kein Primärschlüssel definiert (ich habe jetzt einen identifiziert)
  • Keine Komprimierung

Was ich vorhabe zu tun (in dieser Reihenfolge)

  • Fügen Sie eine Komprimierung auf Seitenebene hinzu
  • PK hinzufügen
  • Fügen Sie eine Reihe von nicht gruppierten Indizes hinzu
  • Mach das so schnell wie möglich

Frage


Worauf ich mich gerade neige

-- Add page level compression
alter table     dbo.TableName
rebuild with    (data_compression = page)
; 
go

-- Add primary key
alter table             dbo.TableName
add constraint          PK_TableName
primary key clustered   (<Columns>)
;
go

-- Add NC_IXs here
...
...

Ich habe hier (PK-Erstellungsdokumentation) und hier (ALTER TABLE-Dokumentation) gesucht , kann jedoch keine endgültigen Aussagen darüber treffen , ob Indizes Einstellungen für die Tabellenkomprimierung erben oder nicht. Die Antwort auf diese spezielle Frage lautet "Nein, Komprimierung wird nicht vererbt", die Sie hier auf dba.stackexchange finden

Adrian Torrie
quelle

Antworten:

12

Der Clustered-Index ist eigentlich die Tabelle. Unter der Annahme, dass Ihr Primärschlüssel geclustert ist, würde ich einen geclusterten Primärschlüssel mit Komprimierung auf Seitenebene erstellen, anstatt dies in zwei Schritten zu versuchen.

-- Add primary key
ALTER TABLE             dbo.TableName
ADD CONSTRAINT          PK_TableName
PRIMARY KEY CLUSTERED   (<Columns>)
WITH (DATA_COMPRESSION = PAGE)
;

Ich würde auch ungefähr 100k Zeilen in eine temporäre (temporäre physische, nicht temporäre) Tabelle kopieren und einige Tests ausführen. Führen Sie zuerst die Komprimierung und zuerst den Clustered Key aus und versuchen Sie, sie in einem Schritt auszuführen. Sehen Sie, was am schnellsten läuft. Ich denke, es wird ein persönlicher Schritt sein :).

Kenneth Fisher
quelle
2

In beiden Fällen wird die Seitenkomprimierung die Daten um eine LOT-Menge verschieben. Ich würde schätzen, dass das Ausführen der Komprimierung zuerst zu weniger E / A insgesamt führen würde, da die Clusteroperation komprimierte Seiten liest.

Max Vernon
quelle