Udostępnij za pośrednictwem


Indeksy kolumnowe — wskazówki dotyczące projektowania

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Database w usłudze Microsoft Fabric

Zalecenia wysokiego poziomu dotyczące projektowania indeksów columnstore. Kilka dobrych decyzji projektowych ułatwia osiągnięcie wysokiej kompresji danych i wydajności zapytań, które indeksy magazynu kolumn zostały zaprojektowane w celu zapewnienia.

Warunki wstępne

W tym artykule założono, że znasz architekturę i terminologię columnstore. Aby uzyskać więcej informacji, zobacz Indeksy Magazynu Kolumn: Omówienie i Architektura Indeksu Magazynu Kolumn.

Znajomość wymagań dotyczących danych

Przed zaprojektowaniem indeksu kolumnowego należy jak najlepiej zrozumieć wymagania dotyczące danych. Na przykład zapoznaj się z odpowiedziami na następujące pytania:

  • Jak duża jest moja tabela?
  • Czy moje zapytania wykonują głównie analizę, która skanuje duże zakresy wartości? Indeksy columnstore są zaprojektowane do dobrego działania przy skanowaniu dużych zakresów zamiast wyszukiwać określone wartości.
  • Czy moje obciążenie wykonuje wiele aktualizacji i usuwania? Indeksy magazynowania kolumnowego działają dobrze, gdy dane są stabilne. Zapytania powinny aktualizować i usuwać mniej niż 10% wierszy.
  • Czy mam tabele faktów i wymiarów dla magazynu danych?
  • Czy muszę przeprowadzić analizę obciążenia transakcyjnego? Jeśli tak, zapoznaj się ze wskazówkami dotyczącymi projektowania kolumnowego magazynu danych dla analizy operacyjnej w czasie rzeczywistym.

Indeks kolumnowy może nie być potrzebny. Tabele z magazynem wierszy (lub drzewa B) ze stosami lub indeksami klastrowymi najlepiej sprawdzają się w przypadku zapytań, które przeszukują dane, wyszukując określoną wartość, lub zapytań dotyczących małego zakresu wartości. Używaj indeksów rowstore z obciążeniami transakcyjnymi, ponieważ zwykle wymagają one głównie wyszukiwania tabel zamiast szerokiego skanowania zakresów tabel.

Wybierz najlepszy indeks magazynu kolumn dla swoich potrzeb

Indeks magazynu kolumn jest klastrowany lub nieklastrowany. Indeks klastrowanego magazynu kolumn może zawierać co najmniej jeden nieklastrowany indeks drzewa B. Indeksy magazynujące kolumny są łatwe do wypróbowania. Jeśli tworzysz tabelę jako indeks magazynu kolumn, możesz łatwo przekonwertować tabelę z powrotem na tabelę magazynu wierszy, upuszczając indeks magazynu kolumn.

Poniżej przedstawiono podsumowanie opcji i zaleceń.

Opcja kolumnowego magazynowania danych Zalecenia dotyczące tego, kiedy należy używać Kompresja
sklasteryzowany indeks magazynu kolumn Użyj dla:

1) Tradycyjne obciążenie magazynu danych ze schematem gwiazdy lub płatka śniegu

2) Obciążenia Internetu rzeczy (IoT), które wstawiają duże ilości danych przy minimalnych aktualizacjach i usuwaniu.
Średnia 10x
uporządkowanego klastrowanego indeksu kolumnowego Użyj, gdy klastrowany indeks magazynu kolumn jest odpytywany przez pojedynczą uporządkowaną kolumnę lub zestaw kolumn. Te wskazówki są podobne do wybierania kolumn kluczy dla indeksu klastrowanego magazynu wierszy, chociaż skompresowane bazowe grupy wierszy zachowują się inaczej. Aby uzyskać więcej informacji, zobacz UTWÓRZ INDEKS KOLUMNOWY i Optymalizacja wydajności z uporządkowanymi klastrowymi indeksami kolumnowymi. Średnia 10x
nieklastrowane indeksy drzewa B na klastrowanym indeksie magazynu kolumn Użyj, aby:

1. Wymuszanie ograniczeń klucza podstawowego i klucza obcego w klastrowanym indeksie columnstore.

2. Przyspiesz zapytania, które wyszukują określone wartości lub małe zakresy wartości.

3. Przyspieszanie aktualizacji i usuwanie określonych wierszy.
Średnio 10x plus nieco dodatkowego miejsca na magazynowanie dla NCIs.
indeks magazynu kolumn nieklastrowanego na stosie opartym na dysku lub indeksu drzewa B Użyj dla:

1) Obciążenie OLTP z pewnymi zapytaniami analitycznymi. Możesz usunąć indeksy drzewa B utworzone na potrzeby analizy i zastąpić je jednym nieklastrowanym indeksem magazynu kolumn.

2) Wiele tradycyjnych obciążeń OLTP, które wykonują operacje Extract, Transform i Load (ETL) w celu przeniesienia danych do oddzielnego magazynu danych. Można wyeliminować proces ETL i oddzielny magazyn danych, tworząc nieklastrowany indeks magazynu kolumn w niektórych tabelach OLTP.
NCCI to dodatkowy indeks, który wymaga średnio 10% więcej miejsca do magazynowania.
indeks kolumnowy w tabeli w pamięci Takie same zalecenia jak dla indeksu magazynu kolumnowego nieklastrowanego w tabeli opartej na dysku, z wyjątkiem tego, że tabela bazowa jest tabelą w pamięci. Indeks kolumnowy jest indeksem dodatkowym.

Używanie klastrowanego indeksu magazynu kolumn dla dużych tabel magazynu danych

Indeks klastrowanego magazynu kolumn jest większy niż indeks— jest to podstawowy magazyn tabel. Zapewnia wysoką kompresję danych i znaczącą poprawę wydajności zapytań w przypadku dużych tabel faktów magazynowania danych i tabel wymiarów. Klastrowane indeksy magazynu kolumnowego najlepiej nadają się do zapytań analitycznych, a nie zapytań transakcyjnych, ponieważ zapytania analityczne zwykle wykonują operacje na dużych zakresach wartości, niż na wyszukiwaniu określonych wartości.

Rozważ użycie klastrowanego kolumnowego indeksu magazynującego, gdy:

  • Każda partycja ma co najmniej milion wierszy. Indeksy Columnstore zawierają grupy wierszy w każdej partycji. Jeśli tabela jest zbyt mała, aby wypełnić grupę wierszy w ramach każdej partycji, nie uzyskasz korzyści z kompresji magazynu kolumn i wydajności zapytań.
  • Zapytania wykonują przede wszystkim analizę zakresów wartości. Aby na przykład znaleźć średnią wartość kolumny, zapytanie musi przeskanować wszystkie wartości kolumn. Następnie agreguje wartości, sumując je w celu określenia średniej.
  • Większość operacji wstawiania dotyczy dużych ilości danych z minimalnymi aktualizacjami i usunięciami. Wiele obciążeń, takich jak Internet rzeczy (IOT) wstawia duże ilości danych z minimalnymi aktualizacjami i usuwaniem. Te obciążenia mogą czerpać korzyści z zwiększenia wydajności kompresji i zapytań, które pochodzą z użycia klastrowanego indeksu magazynu kolumn.

Nie używaj klastrowanego indeksu magazynu kolumn, gdy:

  • Tabela wymaga typów danych varchar(max), nvarchar(max)lub varbinary(max). Lub zaprojektuj indeks magazynu kolumn, aby nie zawierał tych kolumn (dotyczy: SQL Server 2016 (13.x) i poprzednich wersji).
  • Dane tabeli nie są trwałe. Rozważ użycie kopca lub tabeli tymczasowej, gdy musisz szybko przechowywać i usuwać dane.
  • Tabela zawiera mniej niż milion wierszy na partycję.
  • Ponad 10% operacji w tabeli to aktualizacje i usunięcia. Duża liczba aktualizacji i usuwania powoduje fragmentację. Fragmentacja wpływa na współczynniki kompresji oraz wydajność zapytań do momentu uruchomienia operacji reorganizacji, która przenosi wszystkie dane do magazynu kolumnowego i usuwa fragmentację. Aby uzyskać więcej informacji, zobacz Minimalizacja fragmentacji indeksu w indeksie kolumnowym.

Aby uzyskać więcej informacji, zobacz Indeksy magazynowe kolumnowe w hurtowniach danych.

Używanie uporządkowanego klastrowanego indeksu magazynu kolumn dla dużych tabel magazynu danych

Aby uzyskać informacje o dostępności uporządkowanego indeksu columnstore, zobacz Indeksy columnstore: Omówienie.

Rozważ użycie uporządkowanego klastrowanego indeksu magazynu kolumn w następujących scenariuszach:

  • Gdy dane są stosunkowo statyczne (bez częstego zapisu i usuwania), a uporządkowany klucz indeksu klastrowanego magazynu kolumn jest statyczny, uporządkowane klastrowane indeksy magazynu kolumn mogą zapewnić znaczne korzyści w zakresie wydajności w stosunku do nie uporządkowanych klastrowanych indeksów magazynu kolumn lub indeksów klastrowanych magazynu wierszy dla obciążeń analitycznych.
  • Im bardziej różnorodne wartości w pierwszej kolumnie uporządkowanego klastrowanego klucza indeksu magazynu kolumn, tym większe mogą być zyski wydajności dla uporządkowanych klastrowanych indeksów magazynu kolumn. Wynika to z ulepszonej eliminacji segmentów dla danych ciągów. Aby uzyskać więcej informacji, zobacz eliminacja segmentu.
  • Wybierz uporządkowany klucz indeksu kolumnowego z klastrowaniem, który będzie często odpytywany i może korzystać z eliminowania segmentów, w tym pierwsza kolumna klucza. Wzrost wydajności spowodowany eliminacją segmentów w innych kolumnach w tabeli będzie mniej przewidywalny.
  • Przypadki użycia, w których należy wykonywać zapytania dotyczące tylko najnowszych danych analitycznych, na przykład w ciągu ostatnich 15 sekund, uporządkowane indeksy magazynu kolumnowego z klastrowaniem mogą zapewnić eliminację segmentów dla starszych danych. Pierwsza kolumna klucza uporządkowanych danych w klastrowanym magazynie kolumnowym musi zawierać datę/godzinę, na przykład datę/godzinę wstawienia lub utworzenia. Eliminacja segmentu byłaby bardziej skuteczna w uporządkowanym indeksie klastrowanego magazynu kolumn niż w nieurządkowanym indeksie klastrowanego magazynu kolumn.
  • Rozważ uporządkowane indeksy klastrowanego magazynu kolumn w tabelach zawierających klucze z danymi IDENTYFIKATORA GUID, gdzie unikatowy typ danychidentyfikatora może być teraz używany do eliminacji segmentów .

Uporządkowany indeks klastrowy kolumnowy może nie być wystarczająco skuteczny w następujących scenariuszach.

  • Podobnie jak w przypadku innych indeksów magazynów kolumnowych, duża liczba działań wstawiania może spowodować nadmierne we/wy pamięci masowej.
  • W przypadku obciążeń, w których jest dużo operacji zapisu, jakość eliminacji segmentów będzie się zmniejszać z czasem z powodu konserwacji grupy wierszy przez przenosiciela krotek. Można temu zapobiec poprzez regularną konserwację indeksu magazynu kolumn za pomocą funkcji ALTER INDEX REORGANIZE.

Dodaj nieklastrowane indeksy drzewa B w celu wydajnego wyszukiwania w tabelach

Począwszy od programu SQL Server 2016 (13.x), można utworzyć nieklastrowane indeksy B-tree lub rowstore jako indeksy pomocnicze w klastrowanym indeksie magazynu kolumn. Indeks nieklastrowanego drzewa B jest aktualizowany w miarę występowania zmian w indeksie magazynu kolumn. Jest to zaawansowana funkcja, której można użyć na swoją korzyść.

Korzystając z pomocniczego indeksu drzewa B, można efektywnie wyszukiwać określone wiersze bez skanowania wszystkich wierszy. Inne opcje również staną się dostępne. Na przykład można wymusić ograniczenie klucza podstawowego lub obcego przy użyciu ograniczenia UNIQUE w indeksie drzewa B. Ponieważ nieunikatowa wartość nie może być wstawiona do indeksu B-drzewa, SQL Server nie może wstawić wartości do magazynu kolumn.

Rozważ użycie indeksu drzewa B w indeksie magazynu kolumn w celu:

  • Uruchamiaj zapytania, które wyszukują określone wartości lub małe zakresy wartości.
  • Wymusza ograniczenie, takie jak ograniczenie klucza podstawowego lub klucza obcego.
  • Wydajne wykonywanie operacji aktualizacji i usuwania. Indeks drzewa B jest w stanie szybko zlokalizować określone wiersze aktualizacji i usunąć bez skanowania pełnej tabeli lub partycji tabeli.
  • Masz dodatkową przestrzeń dyskową do przechowywania indeksu drzewa B.

Używanie nieklastrowanego indeksu magazynu kolumn na potrzeby analizy w czasie rzeczywistym

Od wersji SQL Server 2016 (13.x), można mieć nieklastrowany indeks magazynu kolumn w tabeli tradycyjnej na dysku lub w tabeli OLTP w pamięci. Dzięki temu można uruchamiać analizę w czasie rzeczywistym w tabeli transakcyjnej. Podczas gdy transakcje zachodzą w tabeli źródłowej, możesz przeprowadzić analizę na indeksie kolumnowym. Ponieważ jedna tabela zarządza obydwoma indeksami, zmiany są dostępne w czasie rzeczywistym zarówno dla indeksu magazynu wierszy, jak i indeksu kolumnowego.

Ponieważ indeks magazynu kolumn osiąga 10-krotną lepszą kompresję danych niż indeks magazynu wierszy, wymaga tylko niewielkiej ilości dodatkowego magazynu. Jeśli na przykład skompresowana tabela magazynu wierszy zajmuje 20 GB, indeks magazynu kolumn może wymagać dodatkowego 2 GB. Wymagane dodatkowe miejsce zależy również od liczby kolumn w indeksie magazynu kolumn nieklastrowanych.

Rozważ użycie nieklastrowanego indeksu magazynu kolumn w celu:

  • Analiza w czasie rzeczywistym na transakcyjnej tabeli wierszowej. Istniejące indeksy drzewa B przeznaczone do analizy można zastąpić nieklastrowanym indeksem magazynu kolumn.

  • Wyeliminuj potrzebę oddzielnego magazynu danych. Tradycyjnie firmy uruchamiają transakcje w tabeli wierszowej, a następnie ładują dane do oddzielnego magazynu danych w celu przeprowadzenia analizy. W przypadku wielu obciążeń można wyeliminować proces ładowania i oddzielny magazyn danych, tworząc nieklastrowany indeks magazynu kolumn w tabelach transakcyjnych.

Program SQL Server 2016 (13.x) oferuje kilka strategii umożliwiających wykonanie tego scenariusza. Jest to bardzo łatwe do wypróbowania, ponieważ można włączyć nieklastrowany indeks magazynu kolumn bez zmian w aplikacji OLTP.

Aby dodać dodatkowe zasoby przetwarzania, możesz uruchomić analizę w pomocniczej wersji pomocniczej z możliwością odczytu. Użycie czytelnego zasobu pomocniczego oddziela przetwarzanie zadań transakcyjnych od zadań analitycznych.

Aby uzyskać więcej informacji, zobacz Rozpoczęcie pracy z Columnstore na potrzeby analizy operacyjnej w czasie rzeczywistym

Aby uzyskać więcej informacji na temat wybierania najlepszego indeksu magazynu kolumn, zobacz blog Sunil Agarwal Który indeks magazynu kolumn jest odpowiedni dla mojego obciążenia?.

Używanie partycji tabeli na potrzeby zarządzania danymi i wydajności zapytań

Indeksy kolumnowe obsługują partycjonowanie, co jest skutecznym sposobem zarządzania i archiwizowania danych. Partycjonowanie zwiększa również wydajność zapytań, ograniczając operacje do co najmniej jednej partycji.

Używanie partycji w celu ułatwienia zarządzania danymi

W przypadku dużych tabel jedynym praktycznym sposobem zarządzania zakresami danych jest użycie partycji. Zalety partycji dla tabel typu rowstore mają również zastosowanie do indeksów kolumnowych.

Na przykład zarówno tabele rowstore, jak i columnstore używają partycji do:

  • Kontrolowanie rozmiaru przyrostowych kopii zapasowych. Możesz utworzyć kopię zapasową partycji w celu oddzielenia grup plików, a następnie oznaczyć je jako tylko do odczytu. Dzięki temu przyszłe kopie zapasowe pominą grupy plików tylko do odczytu.
  • Oszczędzaj koszty magazynowania, przenosząc starszą partycję do tańszego magazynu. Na przykład możesz użyć przełączania partycji, aby przenieść partycję do tańszej lokalizacji magazynu.
  • Wykonywać operacje wydajnie, ograniczając je do partycji. Na przykład można skoncentrować się wyłącznie na pofragmentowanych partycjach w celu konserwacji indeksu.

Ponadto za pomocą indeksu kolumnowego używasz partycjonowania do:

  • Oszczędzaj dodatkowe 30% w kosztach magazynowania. Starsze partycje można kompresować przy użyciu opcji kompresji COLUMNSTORE_ARCHIVE. Dane będą wolniejsze pod względem wydajności zapytań, co jest akceptowalne, jeśli partycja jest odpytywana rzadko.

Zwiększanie wydajności zapytań przy użyciu partycji

Korzystając z partycji, można ograniczyć zapytania do skanowania tylko określonych partycji, co ogranicza liczbę wierszy do skanowania. Jeśli na przykład indeks jest partycjonowany według roku, a zapytanie analizuje dane z ostatniego roku, musi skanować dane tylko w jednej partycji.

Używanie mniejszej liczby partycji dla indeksu składowania kolumn

Jeśli nie masz wystarczająco dużego rozmiaru danych, indeks magazynu kolumn działa najlepiej z mniejszą liczbą partycji niż to, czego można użyć dla indeksu magazynu wierszy. Jeśli nie masz co najmniej miliona wierszy na partycję, większość wierszy może przejść do deltastore, w którym nie otrzymują korzyści z wydajności kompresji columnstore. Jeśli na przykład załadujesz milion wierszy do tabeli z 10 partycjami, a każda partycja otrzyma 100 000 wierszy, wszystkie wiersze trafią do grup wierszy różnicowych.

Przykład:

  • Załaduj 1000 000 wierszy do jednej partycji lub tabeli bez partycji. Otrzymujesz jedną skompresowaną grupę wierszy z 1000 000 wierszy. Jest to doskonałe rozwiązanie w przypadku wysokiej kompresji danych i szybkiej wydajności zapytań.
  • Załaduj 1000 000 wierszy równomiernie do 10 partycji. Każda partycja otrzymuje 100 000 wierszy, co jest mniej niż minimalny próg kompresji kolumnowego magazynu danych. W rezultacie indeks columnstore może mieć 10 grup wierszy różnicowych, zawierające po 100 000 wierszy każda. Istnieją sposoby na wymuszenie "delta rowgroups" do magazynu danych kolumn. Jeśli jednak są to jedyne wiersze w indeksie magazynu kolumn, skompresowane grupy wierszy będą zbyt małe, aby uzyskać najlepszą kompresję i wydajność zapytań.

Aby uzyskać więcej informacji na temat partycjonowania, zobacz wpis na blogu Sunila Agarwala, Czy należy partycjonować indeks magazynu kolumnowego?.

Wybieranie odpowiedniej metody kompresji danych

Indeks magazynu kolumn oferuje dwie opcje kompresji danych: kompresja magazynu kolumn i kompresja archiwum. Możesz wybrać opcję kompresji podczas tworzenia indeksu lub zmienić ją później przy użyciu ALTER INDEX ... ODTWÓRZ.

Używanie kompresji magazynu kolumn w celu uzyskania najlepszej wydajności zapytań

Kompresja indeksów kolumnowych zwykle osiąga 10-krotnie lepszy stopień kompresji w porównaniu z indeksami wierszowymi. Jest to standardowa metoda kompresji indeksów magazynu kolumn i umożliwia szybką wydajność zapytań.

Użyj kompresji archiwum, aby uzyskać najlepszą kompresję danych

Kompresja archiwum jest przeznaczona do maksymalnej kompresji, gdy wydajność zapytań nie jest tak ważna. Osiąga wyższe współczynniki kompresji danych niż kompresja typu columnstore, ale wiąże się to z kosztami. Kompresowanie i dekompresowanie danych trwa dłużej, więc nie nadaje się do szybkiej wydajności zapytań.

Używaj optymalizacji podczas konwertowania tabeli rowstore na indeks columnstore

Jeśli dane są już w tabeli w magazynie wierszowym, możesz użyć CREATE COLUMNSTORE INDEX, aby przekonwertować tabelę na indeks kolumnowy z klastrem. Istnieje kilka optymalizacji, które poprawią wydajność zapytań po przekonwertowaniu tabeli, opisane w dalszej części.

Popraw jakość grupy wierszy za pomocą ustawienia MAXDOP

Maksymalną liczbę procesorów można skonfigurować do konwertowania indeksu stosu lub klastrowanego drzewa B do indeksu magazynu kolumn. Aby skonfigurować procesory, użyj maksymalnego stopnia równoległości (MAXDOP).

Jeśli masz duże ilości danych, MAXDOP 1 prawdopodobnie będzie zbyt wolne. Zwiększenie wartości MAXDOP do 4 działa prawidłowo. Jeśli spowoduje to kilka grup wierszy, które nie mają optymalnej liczby wierszy, można uruchomić ALTER INDEX REORGANIZE scalić je razem w tle.

Zachowaj posortowaną kolejność indeksu drzewa B

Ponieważ indeks drzewa B przechowuje już wiersze w posortowanej kolejności, zachowanie tej kolejności po skompresowaniu wierszy do indeksu magazynu kolumn może poprawić wydajność zapytań.

Indeks magazynu kolumn nie sortuje danych, ale używa metadanych do śledzenia minimalnych i maksymalnych wartości poszczególnych segmentów kolumn w każdej grupie wierszy. Podczas skanowania pod kątem zakresu wartości można szybko obliczyć, kiedy pominąć grupę wierszy. Gdy dane są uporządkowane, można pominąć więcej grup wierszy.

Aby zachować kolejność sortowania podczas konwersji:

  • Użyj CREATE COLUMNSTORE INDEX z klauzulą DROP_EXISTING. Spowoduje to również zachowanie nazwy indeksu. Jeśli masz skrypty, które już używają nazwy indeksu magazynu wierszy, nie trzeba ich aktualizować.

    W tym przykładzie indeks klastrowanego magazynu wierszy na tabeli o nazwie MyFactTable jest konwertowany do klastrowanego indeksu magazynu kolumn. Nazwa indeksu ClusteredIndex_d473567f7ea04d7aafcac5364c241e09pozostaje taka sama.

    CREATE CLUSTERED COLUMNSTORE INDEX ClusteredIndex_d473567f7ea04d7aafcac5364c241e09
    ON MyFactTable
    WITH (DROP_EXISTING = ON);
    

Omówienie eliminacji segmentów

Każda grupa wierszy zawiera jeden segment kolumn dla każdej kolumny w tabeli. Każdy segment kolumny jest kompresowany razem i przechowywany na nośniku fizycznym.

Istnieją metadane z każdym segmentem, aby umożliwić szybką eliminację segmentów bez ich odczytywania. Wybór typu danych może mieć znaczący wpływ na wydajność zapytań na podstawie typowych predykatów filtrów dla zapytań w indeksie kolumnowym. Aby uzyskać więcej informacji, zobacz segment eliminacji.

Są to zadania służące do tworzenia i utrzymania indeksów magazynu kolumn.

Zadanie Artykuły referencyjne Notatki
Utwórz tabelę jako magazyn kolumn. CREATE TABLE (Transact-SQL) Począwszy od programu SQL Server 2016 (13.x), możesz utworzyć tabelę jako indeks klastrowanego magazynu kolumn. Nie musisz najpierw tworzyć tabeli wierszowej, a potem konwertować jej na tabelę kolumnową.
Utwórz tabelę w pamięci z indeksem columnstore. CREATE TABLE (Transact-SQL) Począwszy od programu SQL Server 2016 (13.x), można utworzyć tabelę zoptymalizowaną pod kątem pamięci z indeksem magazynu kolumn. Indeks kolumnowy można również dodać po utworzeniu tabeli, korzystając ze składni ALTER TABLE ADD INDEX.
Przekonwertuj tabelę typu rowstore na tabelę typu columnstore. CREATE COLUMNSTORE INDEX (Transact-SQL) Przekonwertuj istniejącą stertę lub drzewo B na magazyn kolumn. Przykłady pokazują, jak obsługiwać istniejące indeksy, a także nazwę indeksu podczas przeprowadzania tej konwersji.
Przekształcić tabelę kolumnową na tabelę wierszową. CREATE CLUSTERED INDEX (Transact-SQL) lub Konwertuj tabelę kolumn ponownie na stertę wierszy Zazwyczaj ta konwersja nie jest konieczna, ale czasami może wystąpić potrzeba konwersji. Przykłady pokazują, jak przekonwertować magazyn kolumn na stertę lub indeks klastrowany.
Utwórz indeks columnstore w tabeli rowstore. STWÓRZ COLUMNSTORE INDEX (Transact-SQL) Tabela magazynująca wiersze może mieć jeden indeks magazynu kolumn. Począwszy od programu SQL Server 2016 (13.x), indeks magazynu kolumn może mieć warunek filtrowany. Przykłady pokazują podstawową składnię.
Tworzenie wydajnych indeksów na potrzeby analizy operacyjnej. Rozpocznij pracę z Columnstore do analizy operacyjnej w czasie rzeczywistym Opisuje sposób tworzenia uzupełniających indeksów magazynu kolumn i indeksów drzewa B, tak aby zapytania OLTP używały indeksów drzewa B, a zapytania analityczne indeksów magazynu kolumn.
Twórz wydajne indeksy kolumnowe na potrzeby magazynów danych. indeksy magazynu kolumn w magazynie danych Opisuje sposób używania indeksów B-tree w tabelach magazynu kolumn do tworzenia wydajnych zapytań dotyczących magazynowania danych.
Użyj indeksu drzewa B, aby zapewnić przestrzeganie ograniczenia klucza podstawowego w indeksie kolumnowym. Indeksy kolumnowe w hurtowni danych Przedstawia sposób łączenia indeksów drzewa B i magazynu kolumn w celu wymuszania ograniczeń klucza podstawowego w indeksie magazynu kolumn.
Usuń indeks kolumnowy UPUŚĆ INDEKS (Transact-SQL) Usuwanie indeksu magazynu kolumn używa standardowej składni DROP INDEX używanej przez indeksy B-tree. Usunięcie klastrowanego indeksu magazynu kolumn spowoduje przekonwertowanie tabeli magazynu kolumn na stertę.
Usuń wiersz z indeksu columnstore DELETE (Transact-SQL) Użyj DELETE (Transact-SQL), aby usunąć wiersz.

wiersz magazynu kolumnowego: SQL Server oznacza wiersz jako logicznie usunięty, ale nie zwraca pamięci fizycznej dla wiersza do czasu odbudowy indeksu.

wiersz deltastore: program SQL Server logicznie i fizycznie usuwa wiersz.
Zaktualizuj wiersz w indeksie kolumnowym UPDATE (Transact-SQL) Użyj UPDATE (Transact-SQL), aby zaktualizować wiersz.

wiersz magazynu kolumnowego: program SQL Server oznacza wiersz jako logicznie usunięty, a następnie wstawia zaktualizowany wiersz do magazynu różnicowego.

deltastore wiersz: SQL Server aktualizuje wiersz w magazynie różnicowym.
Wymuś przeniesienie wszystkich wierszy z magazynu delty do magazynu kolumnowego. ALTER INDEX (Transact-SQL) ... ODBUDOWAĆ

Optymalizowanie konserwacji indeksu w celu zwiększenia wydajności zapytań i zmniejszenia zużycia zasobów
ALTER INDEX z opcją REBUILD wymusza zapis wszystkich wierszy w magazynie danych kolumnowych.
Defragmentacja indeksu magazynu kolumn ALTER INDEX (Transact-SQL) ALTER INDEX ... REORGANIZE defragmentuje indeksy kolumnowe w trybie online.
Połącz tabele z indeksami kolumnowymi. MERGE (Transact-SQL)

Aby utworzyć pusty indeks kolumnowy dla:

Aby uzyskać więcej informacji na temat konwertowania istniejącego stosu magazynu wierszy lub indeksu drzewa B na indeks klastrowanego magazynu kolumn lub tworzenia indeksu magazynu kolumn nieklastrowanego, zobacz CREATE COLUMNSTORE INDEX (Transact-SQL).