Co nowego w indeksach kolumnowych
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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
lubCREATE INDEX WITH (DROP_EXISTING = ON)
. - Eliminacja grup wierszy Columnstore dla prefiksu predykatów
LIKE
, na przykładcolumn LIKE 'string%'
. Eliminacja segmentów nie jest obsługiwana w przypadku używaniaLIKE
inaczej niż jako prefiks, na przykładcolumn 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 onlineIndeksy 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
,COUNT
iAVG
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
,MAX
iCLR
- Agregacje zdefiniowane przez użytkownika okna:
CHECKSUM_AGG
,STDEV
,STDEVP
,VAR
,VARP
iGROUPING
- Funkcje analityczne agregacji okien:
LAG
,LEAD
,FIRST_VALUE
,LAST_VALUE
,PERCENTILE_CONT
,PERCENTILE_DISC
,CUME_DIST
iPERCENT_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
iDBCC 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
,DELETE
iUPDATE
; 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ń.
Powiązana zawartość
- Indeksy kolumnowe — wskazówki dotyczące projektowania
- Indeksy kolumnowe — poradnik dotyczący ładowania danych
- Indeksy kolumnowe — wydajność zapytań
- Rozpocznij pracę z Columnstore dla potrzeb analizy operacyjnej w czasie rzeczywistym
- Indeksy columnstore w magazynowaniu danych
- Optymalizowanie konserwacji indeksu w celu zwiększenia wydajności zapytań i zmniejszenia zużycia zasobów