Udostępnij za pośrednictwem


Co nowego w indeksach kolumnowych

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

Dowiedz się, które funkcje magazynu kolumn są dostępne dla każdej wersji programu SQL Server oraz dla najnowszych wydań usług SQL Database, Azure Synapse Analytics i Analytics Platform System (PDW).

Podsumowanie cech dla wydań produktów

Ta tabela podsumowuje kluczowe cechy indeksów kolumnowych i produktów, w których są one dostępne.

Funkcja indeksu kolumnowego SQL Server 2012 (11.x) SQL Server 2014 (12.x) SQL Server 2016 (13.x)1 SQL Server 2017 (14.x) SQL Server 2019 (15.x) SQL Server 2022 (16.x) Usługa Azure SQL Database2 i usługa Azure SQL Managed InstanceAUTD Dedykowana pula SQL usługi Azure Synapse Analytics
Wykonywanie w trybie wsadowym dla zapytań wielowątkowych3 tak tak tak tak tak tak tak tak
Wykonywanie zapytań jednowątkowych w trybie wsadowym tak tak tak tak tak tak
Opcja kompresji archiwalnej tak tak tak tak tak tak tak
Izolacja migawki i izolacja migawek zatwierdzonych do odczytu tak tak tak tak tak tak
Określ indeks kolumnowy podczas definiowania tabeli tak tak tak tak tak tak
Funkcja Always On obsługuje indeksy kolumnowe tak tak tak tak tak tak tak tak
Funkcja always On readable secondary obsługuje indeks magazynu kolumn tylko do odczytu nieklastrowany tak tak tak tak tak tak tak tak
Tryb dostępności Always On z możliwością odczytu obsługuje aktualizowalne indeksy magazynu kolumn. tak tak tak tak
Indeks magazynu kolumn nieklastrowanego tylko do odczytu na stercie lub w drzewie B tak tak Tak 4 Tak 4 Tak 4 Tak 4 Tak 4 Tak 4
Aktualizowalny nieklastrowany indeks magazynu kolumn na stercie lub w drzewie B tak tak tak tak tak tak
Dodatkowe indeksy drzewa B są dozwolone na stercie lub drzewie B, które mają indeks magazynu kolumn nieklastrowany. tak tak tak tak tak tak tak tak
Indeks klastrowanego magazynu kolumn z możliwością aktualizacji tak tak tak tak tak tak tak
Indeks drzewa B w klastrowanym indeksie magazynu kolumn tak tak tak tak tak tak
Indeks kolumnowy w tabeli zoptymalizowanej dla pamięci tak tak tak tak tak tak
Nieklastrowana definicja indeksu magazynu kolumn obsługuje używanie filtrowanego warunku tak tak tak tak tak tak
Opcja opóźnienia kompresji dla indeksów magazynu kolumn w CREATE TABLE i ALTER TABLE tak tak tak tak tak tak
Obsługa typu nvarchar(max) tak tak tak tak brak 5
Indeks columnstore może zawierać nietrwałą kolumnę obliczeniową tak tak tak
Obsługa scalania w tle dla modułu przesuwania krotek tak tak tak tak
Uporządkowane klastrowane indeksy kolumnowe tak tak tak
Uporządkowane indeksy nieklasterowanego magazynu kolumn tak
Tworzenie i odbudowa indeksu kolumnowego online tak tak
Tworzenie i odbudowa zamówionego indeksu magazynu kolumn w trybie online tak

1 Dla SQL Server 2016 (13.x) SP1 i późniejszych wersji, indeksy kolumnowe są dostępne we wszystkich edycjach. W przypadku programu SQL Server 2016 (13.x) (przed dodatkiem SP1) i starszych wersji indeksy magazynu kolumn są dostępne tylko w wersji Enterprise.
2 dla usługi Azure SQL Database indeksy kolumnowe są dostępne w warstwach DTU Premium, warstwach DTU Standard — S3 i nowszych oraz we wszystkich poziomach rdzeni wirtualnych. 3 Stopień równoległości (DOP) dla operacji wsadowych jest ograniczony do 2 w edycji SQL Server Standard oraz do 1 w edycjach SQL Server Web i Express. To ograniczenie dotyczy indeksów kolumnowych utworzonych w tabelach przechowywanych na dysku i tabel pamięciooptymalizowanych.
4 Aby utworzyć indeks magazynu kolumn nieklastrowanego tylko do odczytu, zapisz indeks w grupie plików tylko do odczytu.
5 Nieobsługiwane w dedykowanych pulach SQL, ale jest obsługiwane w bezserwerowej puli SQL.
AUTD dotyczy usługi Azure SQL Managed Instance skonfigurowanej przy użyciu always-up-to-date update policy.

SQL Server 2022 (16.x)

Program SQL Server 2022 (16.x) dodał następujące funkcje:

  • Uporządkowane klastrowane indeksy magazynu kolumn zwiększają wydajność zapytań na podstawie uporządkowanych predykatów kolumn. Uporządkowane indeksy kolumnowe mogą zwiększyć wydajność, omijając segmenty danych. Może to znacząco zmniejszyć liczbę operacji wejścia/wyjścia potrzebnych do wykonania zapytań dotyczących danych w formacie kolumnowym. Więcej informacji znajdziesz w eliminacja segmentu. Aby uzyskać więcej informacji, zobacz CREATE COLUMNSTORE INDEX i Optymalizacja wydajności z uporządkowanymi indeksami columnstore.
  • Przesuwanie predykatu poprzez eliminację grup wierszy w klastrowanym magazynie kolumn wykorzystuje wartości graniczne do optymalizacji wyszukiwań ciągów. Wszystkie indeksy kolumnowe korzystają z ulepszonej eliminacji segmentów ze względu na typ danych. Począwszy od programu SQL Server 2022 (16.x), te możliwości eliminacji segmentów rozszerzają się na typy danych ciągów, danych binarnych i GUID oraz typu danych datetimeoffset w celu skalowania większego niż dwa. Wcześniej eliminacja segmentów magazynu kolumn była zastosowana tylko do typów danych liczbowych, daty i czasu oraz typu danych datetimeoffset o skali mniejszej bądź równej dwa. Po uaktualnieniu do wersji programu SQL Server obsługującej eliminację minimalnego/maksymalnego segmentu ciągu (SQL Server 2022 (16.x) i nowszych wersji indeks magazynu kolumn nie korzysta z tej funkcji, dopóki nie zostanie utworzony ponownie przy użyciu ALTER INDEX REBUILD lub CREATE INDEX WITH (DROP_EXISTING = ON).
  • Eliminacja grup wierszy Columnstore dla prefiksu predykatów LIKE, na przykład column LIKE 'string%'. Eliminacja segmentów nie jest obsługiwana w przypadku używania LIKE inaczej niż jako prefiks, na przykład column LIKE '%string'.
  • Aby uzyskać więcej informacji na temat dodanych funkcji, zobacz Co nowego w programie SQL Server 2022.

SQL Server 2019 (15.x)

Program SQL Server 2019 (15.x) dodaje następujące nowe funkcje:

Funkcjonalny

Począwszy od SQL Server 2019 (15.x), przenoszenie krotek jest wspomagane przez zadanie scalania w tle, które automatycznie kompresuje mniejsze grupy różnicowe OPEN istniejące przez określony czas według wewnętrznego progu, lub scala skompresowane grupy wierszy, z których usunięto dużą liczbę rekordów. Wcześniej potrzebna była operacja reorganizacji indeksu w celu scalenia grup wierszy z częściowo usuniętymi danymi. To poprawia jakość indeksu columnstore z upływem czasu.

SQL Server 2017 (14.x)

Program SQL Server 2017 (14.x) dodaje te nowe funkcje.

Funkcjonalny

  • Program SQL Server 2017 (14.x) obsługuje niepersymetryczne kolumny obliczeniowe w klastrowanych indeksach magazynu kolumn. Utrwalone obliczone kolumny nie są obsługiwane w klastrowanych indeksach magazynu kolumn. Nie można utworzyć indeksu Columnstore nieklastrowanego w kolumnie obliczeniowej.

SQL Server 2016 (13.x)

Program SQL Server 2016 (13.x) dodaje kluczowe ulepszenia w celu zwiększenia wydajności i elastyczności indeksów magazynu kolumn. Te ulepszenia zwiększają możliwości scenariuszy magazynowania danych i umożliwiają analizę operacyjną w czasie rzeczywistym.

Funkcjonalny

  • Tabela typu rowstore może zawierać jeden indeks kolumnowy nieklastrowany, który można aktualizować. Wcześniej indeks columnstore nieklastrowany był tylko do odczytu.

  • Definicja indeksu magazynu kolumn nieklastrowanego obsługuje używanie filtrowanego warunku. Aby zminimalizować wpływ na wydajność, jaki ma dodanie indeksu magazynującego kolumny w tabeli OLTP, użyj warunku filtrującego, aby utworzyć nieklastrowany indeks magazynujący kolumny wyłącznie na danych zimnych obciążenia operacyjnego.

  • Tabela w pamięci może mieć jeden indeks kolumnowy. Możesz to utworzyć podczas tworzenia tabeli lub dodać później za pomocą ALTER TABLE (Transact-SQL). Wcześniej tylko tabela dyskowa mogła mieć indeks kolumnowy.

  • Indeks klastrowanego magazynu kolumn może zawierać co najmniej jeden nieklastrowany indeks magazynu wierszy. Wcześniej indeks kolumnowy nie obsługiwał indeksów nieklastrowanych. Program SQL Server automatycznie utrzymuje indeksy nieklastrowane dla operacji DML.

  • Obsługa kluczy podstawowych i kluczy obcych przy użyciu indeksu drzewa B w celu wymuszenia tych ograniczeń dla klastrowanego indeksu magazynu kolumn.

  • Indeksy magazynu kolumn mają opcję opóźnienia kompresji, która minimalizuje wpływ obciążenia transakcyjnego na analizę operacyjną w czasie rzeczywistym. Ta opcja umożliwia częste zmienianie wierszy w celu stabilizacji przed skompresowaniem ich do magazynu kolumn. Aby uzyskać szczegółowe informacje, zobacz CREATE COLUMNSTORE INDEX (Transact-SQL) i Wprowadzenie do indeksu kolumnowego dla analizy operacyjnej w czasie rzeczywistym.

Wydajność dla poziomu zgodności bazy danych 120 lub 130.

  • Indeksy kolumnowe obsługują poziom izolacji z zatwierdzonym odczytem w trybie migawkowym (RCSI) oraz izolację migawkową (SI). Umożliwia to wykonywanie transakcyjnych zapytań analitycznych bez blokad.

  • Magazyn kolumn obsługuje defragmentację indeksu przez usunięcie usuniętych wierszy bez konieczności jawnego ponownego kompilowania indeksu. Instrukcja ALTER INDEX ... REORGANIZE usuwa usunięte wiersze na podstawie zasad zdefiniowanych wewnętrznie z magazynu kolumn jako operacji online

  • Indeksy magazynu kolumnowego mogą być dostępne na Always On czytelnej replice podrzędnej. Można poprawić wydajność analiz operacyjnych, kierując zapytania analityczne do pomocniczej repliki Always On.

  • Aggregate Pushdown oblicza funkcje agregujące MIN, MAX, SUM, COUNTi AVG podczas skanowania tabeli, gdy typ danych zużywa nie więcej niż 8 bajtów i nie jest typem ciągu znaków. Wypychanie agregatów jest obsługiwane z klauzulą GROUP BY lub bez niej zarówno dla klastrowanych indeksów kolumnowych, jak i nieklastrowanych indeksów kolumnowych. W programie SQL Server to rozszerzenie jest zarezerwowane dla wersji Enterprise.

  • Wypychanie predykatu ciągów przyspiesza zapytania porównujące ciągi typu VARCHAR/CHAR lub NVARCHAR/NCHAR. Dotyczy to typowych operatorów porównania i obejmuje operatory, takie jak LIKE używające filtrów map bitowych. To działa ze wszystkimi obsługiwanymi sortowaniami. W programie SQL Server to rozszerzenie jest zarezerwowane dla wersji Enterprise.

  • Ulepszenia operacji w trybie wsadowym dzięki wykorzystaniu możliwości sprzętowych bazujących na technologii wektorowej. Silnik bazy danych wykrywa poziom obsługi procesora dla rozszerzeń sprzętowych AVX 2 (Advanced Vector Extensions) i SSE 4 (Streaming SIMD Extensions 4) i używa ich, jeśli są obsługiwane. W programie SQL Server to rozszerzenie jest zarezerwowane dla wersji Enterprise.

Wydajność dla poziomu zgodności bazy danych 130

  • Nowe wsparcie dla wykonywania zapytań w trybie wsadowym z wykorzystaniem dowolnej z tych operacji:

    • SORT
    • Agregaty z wieloma odrębnymi funkcjami. Kilka przykładów: COUNT/COUNT, AVG/SUM, CHECKSUM_AGG, STDEV/STDEVP
    • Funkcje agregujące okna: COUNT, COUNT_BIG, SUM, AVG, MIN, MAXi CLR
    • Agregacje zdefiniowane przez użytkownika okna: CHECKSUM_AGG, STDEV, STDEVP, VAR, VARPi GROUPING
    • Funkcje analityczne agregacji okien: LAG, LEAD, FIRST_VALUE, LAST_VALUE, PERCENTILE_CONT, PERCENTILE_DISC, CUME_DISTi PERCENT_RANK
  • Zapytania jednowątkowe działające w MAXDOP 1 lub z planem zapytania szeregowego są wykonywane w trybie wsadowym. Wcześniej tylko zapytania wielowątkowe były uruchamiane w trybie wsadowym.

  • Zapytania tabel zoptymalizowane pod pamięć mogą mieć równoległe plany w trybie SQL InterOp zarówno podczas uzyskiwania dostępu do danych w składowaniu wierszy, jak i w indeksie składowania kolumn.

Wspieralność

Te widoki systemowe są nowe dla columnstore.

Te dynamiczne widoki DMV oparte na OLTP w pamięci zawierają aktualizacje dla magazynu kolumn.

Ograniczenia

  • W przypadku tabel w pamięci indeks magazynu kolumn musi zawierać wszystkie kolumny; indeks magazynu kolumn nie może mieć filtrowanego warunku.
  • W przypadku tabel w pamięci zapytania dotyczące indeksów magazynu kolumn działają tylko w trybie międzyoperacyjnym, a nie w trybie kompilacji natywnej. Wykonywanie równoległe jest obsługiwane.

Znane problemy

Dotyczy: SQL Server, Azure SQL Managed Instance

  • Obecnie kolumny LOB (varbinary(max), varchar(max) i nvarchar(max)) w skompresowanych segmentach magazynu kolumnowego nie są dotknięte przez DBCC SHRINKDATABASE i DBCC SHRINKFILE.

SQL Server 2014 (12.x)

Program SQL Server 2014 (12.x) wprowadził indeks kolumnowy zgrupowany jako podstawowy format przechowywania. Umożliwiło to regularne ładowanie, a także operacje aktualizacji, usuwania i wstawiania.

  • Tabela może używać klastrowanego indeksu magazynu kolumn jako podstawowego magazynu tabel. W tabeli nie są dozwolone żadne inne indeksy, ale indeks klastrowanego magazynu kolumn można aktualizować, dzięki czemu można wykonywać regularne obciążenia i wprowadzać zmiany w poszczególnych wierszach.
  • Nieklastrowany indeks magazynu kolumn nadal ma takie same funkcje jak w programie SQL Server 2012 (11.x) z wyjątkiem dodatkowych operatorów, które można teraz wykonywać w trybie wsadowym. Nadal nie można jej zaktualizować z wyjątkiem ponownego kompilowania i przełączania partycji. Nieklastrowany indeks magazynu kolumnowego jest obsługiwany tylko w tabelach przechowywanych na dysku, a nie w tabelach w pamięci.
  • Klasterowany i nieklastrowany indeks magazynu kolumn ma opcję kompresji archiwalnej, która dodatkowo kompresuje dane. Opcja archiwizacji jest przydatna do zmniejszenia rozmiaru danych zarówno w pamięci, jak i na dysku, ale ma niską wydajność zapytań. Dobrze sprawdza się w przypadku rzadko używanych danych.
  • Klastrowany indeks magazynu kolumnowego i nieklastrowany indeks magazynu kolumnowego działają w bardzo podobny sposób; używają tego samego formatu magazynu kolumnowego, tego samego aparatu przetwarzania zapytań i tego samego zestawu dynamicznych widoków zarządzania. Różnica dotyczy typów indeksów podstawowych i pomocniczych, a indeks kolumnowy nieklastrowany jest tylko do odczytu.
  • Te operatory działają w trybie wsadowym dla zapytań wielowątkowych: skanowanie, filtrowanie, projekcja, łączenie, grupowanie według i złączenie wszystkich.

SQL Server 2012 (11.x)

Program SQL Server 2012 (11.x) wprowadził nieklastrowany indeks columnstore jako inny typ indeksu w tabelach typu rowstore oraz przetwarzanie wsadowe dla zapytań dotyczących danych columnstore.

  • Tabela rowstore może zawierać jeden nieklastrowany indeks kolumnowy.
  • Indeks kolumnowy jest tylko do odczytu. Po utworzeniu indeksu magazynu kolumn nie można zaktualizować tabeli przez operacje INSERT, DELETEi UPDATE; aby wykonać te operacje, należy usunąć indeks, zaktualizować tabelę i ponownie skompilować indeks magazynu kolumn. Dodatkowe dane można załadować do tabeli przy użyciu przełączania partycji. Zaletą przełączania partycji jest ładowanie danych bez usuwania i ponownego kompilowania indeksu magazynu kolumn.
  • Indeks columnstore zawsze wymaga dodatkowej przestrzeni, zazwyczaj o 10% więcej niż rowstore, ponieważ przechowuje kopię danych.
  • Przetwarzanie wsadowe zapewnia dwukrotnie lub lepszą wydajność zapytań, ale jest dostępne tylko w przypadku równoległego wykonywania zapytań.