Czy powinienem dodać kompresję na poziomie strony przed dodaniem klucza podstawowego, czy później?

14

Sytuacja

  • Hurtownia danych w Sql Server 2008 Enterprise
  • Ponad 36 milionów stosów wierszy (nie pytaj), z ponad 60 kolumnami
  • 750 tys. Dodawane miesięcznie
  • Nie zdefiniowano klucza podstawowego (teraz go zidentyfikowałem)
  • Bez kompresji

Co myślę o robieniu (w tej kolejności)

  • Dodaj kompresję na poziomie strony
  • Dodaj PK
  • Dodaj wiele indeksów nieklastrowych
  • Zrób to tak szybko, jak to możliwe

Pytanie


W tym momencie się pochylam

-- 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
...
...

Zajrzałem tutaj (dokumentacja tworzenia PK) i tutaj (dokumentacja ALTER TABLE) , ale nie widzę nic ostatecznego na temat tego, czy jakieś indeksy dziedziczą ustawienia kompresji tabeli. Odpowiedź na to pytanie brzmi: „Nie, kompresja nie jest dziedziczona”, znaleziona tutaj na dba.stackexchange

Adrian Torrie
źródło

Odpowiedzi:

12

Indeks klastrowy jest w rzeczywistości tabelą. Zakładając, że klucz podstawowy jest klastrowany, utworzę klastrowany klucz podstawowy z kompresją na poziomie strony zamiast próbować zrobić to w dwóch krokach.

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

Skopiowałbym również około 100 000 wierszy do tymczasowej (tymczasowej fizycznej, a nie # współczesnej) tabeli i przeprowadziłem kilka testów. Najpierw spróbuj uruchomić kompresję, najpierw klucz klastrowany, spróbuj wykonać je jako jeden krok. Zobacz, co działa najszybciej. Sądzę, że będzie to jeden krok osobiście :).

Kenneth Fisher
źródło
2

Tak czy inaczej, kompresja stron będzie tasować dane wokół LOT. Oszacowałbym, że wykonanie kompresji w pierwszej kolejności spowodowałoby mniejszą liczbę operacji we / wy, ponieważ operacja klastrowania będzie czytać skompresowane strony.

Max Vernon
źródło