Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytický platformový systém (PDW)
SQL databáze v Microsoft Fabric
Převeďte tabulku rowstore na clusterovaný index columnstore nebo vytvořte neclusterovaný index columnstore. Index columnstore můžete použít k efektivnímu spouštění provozních analýz v reálném čase u úlohy OLTP nebo ke zlepšení komprese dat a dotazování na výkon úloh datových skladů.
Nejnovější vylepšení této funkce najdete v indexech columnstore podle novinek .
Uspořádané clusterované indexy columnstore byly zavedeny v SQL Serveru 2022 (16.x). Další informace naleznete v tématu CREATE COLUMNSTORE INDEX. Informace o dostupnosti uspořádaného indexu columnstore najdete v části Indexy Columnstore: Přehled.
Počínaje SQL Serverem 2016 (13.x) můžete tabulku vytvořit jako clusterovaný index columnstore. Už není nutné nejprve vytvořit tabulku rowstore a pak ji převést na clusterovaný index columnstore.
Informace o pokynech k návrhu indexu columnstore najdete v tématu Indexy Columnstore – Pokyny k návrhu.
Syntaxe
Syntaxe pro Azure SQL Database a Azure SQL Managed InstanceAUTD:
-- Create a clustered columnstore index on disk-based table.
CREATE CLUSTERED COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ ORDER (column [ , ...n ] ) ]
[ WITH ( <with_option> [ , ...n ] ) ]
[ ON <on_option> ]
[ ; ]
-- Create a nonclustered columnstore index on a disk-based table.
CREATE [ NONCLUSTERED ] COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
( column [ , ...n ] )
[ ORDER (column [ , ...n ] ) ]
[ WHERE <filter_expression> [ AND <filter_expression> ] ]
[ WITH ( <with_option> [ , ...n ] ) ]
[ ON <on_option> ]
[ ; ]
<with_option> ::=
DROP_EXISTING = { ON | OFF } -- default is OFF
| MAXDOP = max_degree_of_parallelism
| ONLINE = { ON | OFF }
| COMPRESSION_DELAY = { 0 | delay [ MINUTES ] }
| DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
[ ON PARTITIONS ( { partition_number_expression | range } [ , ...n ] ) ]
<on_option>::=
partition_scheme_name ( column_name )
| filegroup_name
| "default"
<filter_expression> ::=
column_name IN ( constant [ , ...n ]
| column_name { IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !< } constant )
Syntaxe SQL Serveru:
-- Create a clustered columnstore index on disk-based table.
CREATE CLUSTERED COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ WITH ( <with_option> [ , ...n ] ) ]
[ ORDER (column [ , ...n ] ) ]
[ ON <on_option> ]
[ ; ]
-- Create a nonclustered columnstore index on a disk-based table.
CREATE [ NONCLUSTERED ] COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
( column [ , ...n ] )
[ ORDER (column [ , ...n ] ) ]
[ WHERE <filter_expression> [ AND <filter_expression> ] ]
[ WITH ( <with_option> [ , ...n ] ) ]
[ ON <on_option> ]
[ ; ]
<with_option> ::=
DROP_EXISTING = { ON | OFF } -- default is OFF
| MAXDOP = max_degree_of_parallelism
| ONLINE = { ON | OFF }
| COMPRESSION_DELAY = { 0 | delay [ MINUTES ] }
| DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
[ ON PARTITIONS ( { partition_number_expression | range } [ , ...n ] ) ]
<on_option>::=
partition_scheme_name ( column_name )
| filegroup_name
| "default"
<filter_expression> ::=
column_name IN ( constant [ , ...n ]
| column_name { IS | IS NOT | = | <> | != | > | >= | !> | < | <= | !< } constant )
Syntaxe pro Systém platformy Azure Synapse Analytics a Analytics (PDW):
CREATE CLUSTERED COLUMNSTORE INDEX index_name
ON { database_name.schema_name.table_name | schema_name.table_name | table_name }
[ ORDER ( column [ , ...n ] ) ]
[ WITH ( DROP_EXISTING = { ON | OFF } ) ] -- default is OFF
[;]
Dostupnost verzí
Některé z možností nejsou dostupné ve všech verzích databázového stroje. Následující tabulka uvádí verze, kdy jsou možnosti zavedeny v clusterovém columnstore a neclustered columnstore indexy:
Možnost | Seskupený | NECLUSTERED |
---|---|---|
COMPRESSION_DELAY | SQL Server 2016 (13.x) | SQL Server 2016 (13.x) |
DATA_COMPRESSION | SQL Server 2016 (13.x) | SQL Server 2016 (13.x) |
ONLINE | SQL Server 2019 (15.x) | SQL Server 2017 (14.x) |
Klauzule WHERE | není k dispozici | SQL Server 2016 (13.x) |
Klauzule ORDER | SQL Server 2016 (13.x) | SQL Server 2025 (17.x) Preview |
Všechny možnosti jsou k dispozici ve službě Azure SQL Database a ve službě Azure SQL Managed InstanceAUTD.
Další podrobnosti o dostupnosti funkcí najdete v tématu Co je nového v indexech columnstore.
Argumenty
VYTVOŘENÍ CLUSTEROVANÉHO INDEXU COLUMNSTORE
Vytvořte clusterovaný index columnstore, ve kterém se všechna data komprimují a ukládají podle sloupce. Index obsahuje všechny sloupce v tabulce a ukládá celou tabulku. Pokud je existující tabulka haldou nebo clusterovaným indexem, převede se na clusterovaný index columnstore. Pokud je tabulka již uložená jako clusterovaný index columnstore, stávající index se zahodí a znovu sestaví.
Důležité
V databázi SQL v prostředcích infrastruktury musí být clusterovaný index columnstore vytvořen ve stejné dávce nebo transakci jako tabulka, do které patří. Přidání clusterovaného indexu columnstore do tabulky po jejím vytvoření může vést k následující chybě:
Msg 35354, Level 16, State 1, Line 63, The statement failed because a clustered columnstore index cannot be created on a table enabled for Change Feed. Consider disabling Change Feed and then creating the clustered columnstore index.
index_name
Určuje název nového indexu.
Pokud tabulka již obsahuje clusterovaný index columnstore, můžete zadat stejný název jako existující index, nebo můžete použít možnost DROP EXISTING k zadání nového názvu.
ON [ database_name. [ schema_name ] . | schema_name . ] table_name
Určuje název tabulky s jednou, dvěma nebo třemi částmi, který se má uložit jako clusterovaný index columnstore. Pokud je tabulka haldou nebo má clusterovaný index, tabulka se převede z úložiště řádků na columnstore. Pokud je tabulka již columnstore, tento příkaz znovu sestaví clusterovaný index columnstore.
ORDER for clustered columnstore
column_store_order_ordinal
Pomocí sloupce v sys.index_columns určete pořadí sloupců pro clusterovaný index columnstore. Pomůcky řazení columnstore s eliminací segmentů, zejména s řetězcovými daty. Další informace najdete v tématu Ladění výkonu s seřazenými indexy columnstore a indexy Columnstore – Pokyny k návrhu.
Pokud chcete převést na uspořádaný clusterovaný index columnstore, stávající index musí být clusterovaný index columnstore. Použijte tuto DROP_EXISTING
možnost.
Datové typy LOB (datové typy maximální délky) nemohou být klíčem seřazeného clusterovaného indexu columnstore.
Při vytváření uspořádaného clusterovaného indexu columnstore použijte MAXDOP = 1
možnost pro řazení nejvyšší kvality, výměnou za výrazně delší dobu trvání CREATE INDEX
příkazu. Pokud chcete index vytvořit co nejrychleji, neomežujte maxDOP. Nejvyšší kvalita komprese a řazení by mohla pomoct dotazům na index columnstore.
Informace o dostupnosti uspořádaného indexu columnstore najdete v části Indexy Columnstore: Přehled.
Možnosti WITH
DROP_EXISTING = [VYPNUTO] | NA
DROP_EXISTING = ON
určuje, že chcete odstranit existující index a vytvořit nový index columnstore.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH (DROP_EXISTING = ON);
Výchozí hodnota, DROP_EXISTING = VYPNUTO, očekává, že název indexu je stejný jako existující název. Pokud zadaný název indexu již existuje, dojde k chybě.
MAXDOP = max_degree_of_parallelism
Tato možnost může během operace indexu přepsat stávající maximální stupeň konfigurace serveru paralelismu. Pomocí funkce MAXDOP omezte počet procesorů používaných při paralelním provádění plánu. Maximum je 64 procesorů.
max_degree_of_parallelism hodnot může být:
- 1, což znamená potlačení paralelního generování plánu.
- >1, což znamená omezení maximálního počtu procesorů používaných v paralelní operaci indexu na zadané číslo nebo méně na základě aktuální systémové úlohy. Pokud například MAXDOP = 4, počet použitých procesorů je 4 nebo méně.
- 0 (výchozí), což znamená použití skutečného počtu procesorů nebo méně na základě aktuální systémové úlohy.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH (MAXDOP = 2);
Další informace najdete v tématu Konfigurace serveru: maximální stupeň paralelismu a konfigurace operací paralelního indexu.
COMPRESSION_DELAY = 0 | delay [ MINUTES ]
V případě tabulky založené na disku zpoždění určuje minimální počet minut, po které musí rozdílová skupina řádků v uzavřeném stavu zůstat v rozdílové skupině řádků. SQL Server ho pak může zkomprimovat do komprimované skupiny řádků. Vzhledem k tomu, že tabulky založené na disku nesledují časy vložení a aktualizace jednotlivých řádků, SQL Server použije zpoždění u rozdílových skupin řádků v uzavřeném stavu.
Výchozí hodnota je 0 minut.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH ( COMPRESSION_DELAY = 10 MINUTES );
Doporučení, kdy použít COMPRESSION_DELAY, najdete v tématu Začínáme se službou Columnstore pro provozní analýzy v reálném čase.
DATA_COMPRESSION = COLUMNSTORE | COLUMNSTORE_ARCHIVE
Určuje možnost komprese dat pro zadanou tabulku, číslo oddílu nebo rozsah oddílů. Možnosti jsou následující:
-
COLUMNSTORE
je výchozí hodnota a určuje, že se má komprimovat s nejvýkonnější kompresí columnstore. Tato možnost je typická volba. -
COLUMNSTORE_ARCHIVE
dále zkomprimuje tabulku nebo oddíl na menší velikost. Tuto možnost použijte v situacích, jako je archivace, která vyžaduje menší velikost úložiště a může si dovolit více času pro ukládání a načítání.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH ( DATA_COMPRESSION = COLUMNSTORE_ARCHIVE );
Další informace o kompresi naleznete v tématu Komprese dat.
ONLINE = [ON | VYPNUTO]
-
ON
určuje, že index columnstore zůstává online a dostupný, zatímco se sestavuje nová kopie indexu. -
OFF
určuje, že index není během vytváření nové kopie k dispozici pro použití.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
WITH ( ONLINE = ON );
Možnosti ZAPNUTO
Pomocí těchto možností můžete zadat možnosti pro úložiště dat, jako je schéma oddílů, konkrétní skupina souborů nebo výchozí skupina souborů. Pokud není zadána možnost ZAPNUTO, index použije nastavení oddílu nastavení nebo nastavení skupiny souborů existující tabulky.
partition_scheme_name ( column_name ) určuje schéma oddílů tabulky. Schéma oddílů již musí existovat v databázi. Pokud chcete vytvořit schéma oddílů, přečtěte si téma CREATE PARTITION SCHEME (Transact-SQL).
column_name určuje sloupec, podle kterého je dělený index rozdělený. Tento sloupec musí odpovídat datovému typu, délce a přesnosti argumentu funkce oddílu, který partition_scheme_name používá.
filegroup_name určuje skupinu souborů pro ukládání clusterovaného indexu columnstore. Pokud není zadané žádné umístění a tabulka není rozdělená na oddíly, index použije stejnou skupinu souborů jako podkladová tabulka nebo zobrazení. Skupina souborů už musí existovat.
Chcete-li vytvořit index ve výchozí skupině souborů, použijte "default"
nebo [default]
. Pokud zadáte "default"
, QUOTED_IDENTIFIER
musí být ON
tato možnost určená pro aktuální relaci.
QUOTED_IDENTIFIER
je ve výchozím nastavení ON
. Další informace naleznete v části SET QUOTED_IDENTIFIER (Transact-SQL).
CREATE [NONCLUSTERED] COLUMNSTORE INDEX
Vytvořte neclusterovaný index columnstore v tabulce rowstore uložené jako haldu nebo clusterovaný index. Index může mít filtrovanou podmínku a nemusí obsahovat všechny sloupce podkladové tabulky. Index columnstore vyžaduje dostatek místa pro uložení kopie dat. Index můžete aktualizovat a aktualizuje se při změně podkladové tabulky. Neclusterovaný index columnstore v clusterovém indexu umožňuje analýzu v reálném čase.
index_name
Určuje název indexu. index_name musí být v rámci tabulky jedinečné, ale nemusí být v databázi jedinečné. Názvy indexů musí dodržovat pravidla identifikátorů .
( sloupec [ ,... n ] )
Určuje sloupce, které se mají uložit. Neclusterovaný index columnstore je omezený na 1 024 sloupců.
Každý sloupec musí mít podporovaný datový typ pro indexy columnstore. Seznam podporovaných datových typů najdete v tématu Omezení a omezení .
ON [ database_name. [ schema_name ] . | schema_name . ] table_name
Určuje jednodílný, dvoudílný nebo třídílný název tabulky, která obsahuje index.
ORDER for nonclustered columnstore
Sloupce zadané v ORDER
klauzuli pro neclusterovaný index columnstore musí být podmnožinou klíčových sloupců indexu.
column_store_order_ordinal
Pomocí sloupce v sys.index_columns určete pořadí sloupců pro neclusterovaný index columnstore. Pomůcky řazení columnstore s eliminací segmentů, zejména s řetězcovými daty. Další informace najdete v tématu Ladění výkonu s seřazenými indexy columnstore a indexy Columnstore – Pokyny k návrhu. Aspekty návrhu a výkonu v těchto článcích se obecně vztahují na clusterované i neclusterované indexy columnstore.
Datové typy LOB (datové typy maximální délky) nemohou být klíčem seřazeného neclusterovaného indexu columnstore.
Při vytváření uspořádaného neclusterovaného indexu columnstore použijte MAXDOP = 1
možnosti pro řazení nejvyšší kvality, výměnou za výrazně delší dobu trvání CREATE INDEX
příkazu. Pokud chcete index vytvořit co nejrychleji, neomežujte MAXDOP
ho. Nejvyšší kvalita komprese a řazení by mohla pomoct dotazům na index columnstore.
Pro dostupnost seřazeného columnstore indexu, viz Dostupnost seřazeného indexu sloupcového úložiště.
Možnosti WITH
DROP_EXISTING = [VYPNUTO] | NA
DROP_EXISTING = ON The existing index is dropped and rebuilt. Zadaný název indexu musí být stejný jako aktuálně existující index; definici indexu však lze upravit. Můžete například zadat různé sloupce nebo možnosti indexu.
DROP_EXISTING = VYPNUTO
Pokud zadaný název indexu již existuje, zobrazí se chyba. Typ indexu nelze změnit pomocí DROP_EXISTING. V zpětně kompatibilní syntaxi je funkce WITH DROP_EXISTING ekvivalentní DROP_EXISTING WITH DROP_EXISTING = ZAPNUTO.
MAXDOP = max_degree_of_parallelism
Přepíše konfiguraci serveru: maximální stupeň konfigurace paralelismu během operace indexu. Pomocí funkce MAXDOP omezte počet procesorů používaných při paralelním provádění plánu. Maximum je 64 procesorů.
max_degree_of_parallelism hodnot může být:
- 1, což znamená potlačení paralelního generování plánu.
- >1, což znamená omezení maximálního počtu procesorů používaných v paralelní operaci indexu na zadané číslo nebo méně na základě aktuální systémové úlohy. Pokud například MAXDOP = 4, počet použitých procesorů je 4 nebo méně.
- 0 (výchozí), což znamená použít skutečný počet procesorů nebo méně procesorů na základě aktuální systémové úlohy.
Další informace naleznete v tématu Konfigurace paralelních indexových operací.
Poznámka:
Paralelní indexové operace nejsou k dispozici v každé edici Microsoft SQL Serveru. Seznam funkcí podporovaných edicemi SQL Serveru najdete v tématu Edice a podporované funkce systému SQL Server 2022.
ONLINE = [ON | VYPNUTO]
-
ON
určuje, že index columnstore zůstává online a dostupný, zatímco se sestavuje nová kopie indexu. -
OFF
určuje, že index není během vytváření nové kopie k dispozici pro použití. V neclusterovém indexu zůstává základní tabulka k dispozici. Pouze neclusterovaný index columnstore se nepoužívá k uspokojení dotazů, dokud se nový index nedokončí.
CREATE COLUMNSTORE INDEX ncci ON Sales.OrderLines (StockItemID, Quantity, UnitPrice, TaxRate)
WITH ( ONLINE = ON );
COMPRESSION_DELAY = 0 | delay [ MINUTES ]
Určuje dolní mez, jak dlouho má řádek zůstat v rozdílové skupině řádků, než bude mít nárok na migraci do komprimované skupiny řádků. Můžete například říci, že pokud se řádek po dobu 120 minut nezmění, má tento řádek nárok na komprimaci do sloupcového formátu úložiště.
U indexu columnstore v tabulkách založených na disku není čas vložení nebo aktualizace řádku sledován. Místo toho se uzavřený čas skupiny řádků delta používá jako proxy server řádku. Výchozí doba trvání je 0 minut. Řádek se migruje do sloupcového úložiště po 1 milionech řádků, které se nahromáždí v rozdílové skupině řádků a označí se jako uzavřené.
DATA_COMPRESSION
Určuje možnost komprese dat pro zadanou tabulku, číslo oddílu nebo rozsah oddílů. Platí pouze pro indexy columnstore, včetně neclusterovaných i clusterovaných. Možnosti jsou následující:
-
COLUMNSTORE
je výchozí hodnota a určuje, že se má komprimovat s nejvýkonnější kompresí columnstore. Tato možnost je typická volba. -
COLUMNSTORE_ARCHIVE
dále zkomprimuje tabulku nebo oddíl na menší velikost. Tuto možnost můžete použít pro archivaci nebo pro jiné situace, které vyžadují menší velikost úložiště a můžou si dovolit více času pro ukládání a načítání.
Další informace o kompresi naleznete v tématu Komprese dat.
WHERE <filter_expression> [ AND <filter_expression> ]
Tato možnost označuje, které řádky se mají zahrnout do indexu, se nazývá predikát filtru. SQL Server vytvoří filtrované statistiky pro datové řádky ve filtrovaného indexu.
Predikát filtru používá jednoduchou porovnávací logiku. Porovnání, která používají NULL
literály, nejsou povolená s relačními operátory. Místo toho použijte operátory IS NULL
a IS NOT NULL
.
Tady je několik příkladů predikátů filtru pro tabulku Production.BillOfMaterials
:
WHERE StartDate > '20000101' AND EndDate <= '20000630'
WHERE ComponentID IN (533, 324, 753)
WHERE StartDate IN ('20000404', '20000905') AND EndDate IS NOT NULL
Pokyny k filtrovaným indexům najdete v tématu Vytvoření filtrovaných indexů.
Možnosti ZAPNUTO
Následující možnosti určují skupiny souborů, na kterých je index vytvořen.
partition_scheme_name ( column_name )
Určuje schéma oddílů, které definuje skupiny souborů, na které jsou namapovány oddíly děleného indexu. Schéma oddílů musí existovat v databázi spuštěním příkazu CREATE PARTITION SCHEME.
column_name určuje sloupec, podle kterého je dělený index rozdělený. Tento sloupec musí odpovídat datovému typu, délce a přesnosti argumentu funkce oddílu, který partition_scheme_name používá. column_name nejsou omezeny na sloupce v definici indexu. Při dělení indexu columnstore přidá databázový stroj sloupec dělení jako sloupec indexu, pokud ještě není zadaný.
Pokud je tabulka rozdělená na oddíly a partition_scheme_name nebo skupina souborů nejsou zadané, index se umístí do stejného schématu oddílů a použije stejný sloupec dělení jako podkladová tabulka.
Index columnstore v dělené tabulce musí být zarovnaný. Další informace o dělení indexů naleznete v tématu Dělené tabulky a indexy.
filegroup_name
Určuje název skupiny souborů, pro kterou se má index vytvořit. Pokud filegroup_name nezadáte a tabulka není rozdělená na oddíly, index použije stejnou skupinu souborů jako podkladová tabulka. Skupina souborů už musí existovat.
výchozí
Vytvoří zadaný index ve výchozí skupině souborů.
Výchozí termín v tomto kontextu není klíčové slovo. Jedná se o identifikátor výchozí skupiny souborů, který musí být oddělený jako in ON "default"
nebo ON [default]
. Pokud "default"
je zadána možnost QUOTED_IDENTIFIER musí být pro aktuální relaci zapnutá, což je výchozí nastavení. Další informace naleznete v tématu SET QUOTED_IDENTIFIER.
Povolení
Vyžaduje oprávnění ALTER u tabulky.
Poznámky
Index columnstore můžete vytvořit v dočasné tabulce. Když se tabulka ukončí nebo relace skončí, index se také zahodí.
V databázi SQL Fabric nejsou tabulky s clusterovanými indexy columnstore zrcadlené na Fabric OneLake.
Filtrované indexy
Filtrovaný index je optimalizovaný, neclusterovaný index, který je vhodný pro dotazy, které z tabulky vyberou malé procento řádků. Používá predikát filtru k indexování části dat v tabulce. Dobře navržený filtrovaný index může zlepšit výkon dotazů, snížit náklady na úložiště a snížit náklady na údržbu.
Požadované možnosti SET pro filtrované indexy
Možnosti SET ve sloupci požadovaná hodnota jsou vyžadovány vždy, když dojde k některé z následujících podmínek:
- Vytvoříte filtrovaný index.
- Operace INSERT, UPDATE, DELETE nebo MERGE upravuje data ve filtrovaného indexu.
- Optimalizátor dotazů používá filtrovaný index k vytvoření plánu dotazu.
Možnosti SET | Požadovaná hodnota | Výchozí hodnota serveru | Výchozí hodnota OLE DB a ODBC | Výchozí hodnota DB-Library |
---|---|---|---|---|
ANSI_NULLS | Zapnuto | Zapnuto | Zapnuto | Vypnuto |
ANSI_PADDING | Zapnuto | Zapnuto | Zapnuto | Vypnuto |
ANSI_WARNINGS 1 | Zapnuto | Zapnuto | Zapnuto | Vypnuto |
ARITHABORT | Zapnuto | Zapnuto | Vypnuto | Vypnuto |
Nastavení CONCAT_NULL_YIELDS_NULL | Zapnuto | Zapnuto | Zapnuto | Vypnuto |
NUMERIC_ROUNDABORT - Nastavení pro zrušení zaokrouhlování čísel | Vypnuto | Vypnuto | Vypnuto | Vypnuto |
Citovaný identifikátor | Zapnuto | Zapnuto | Zapnuto | Vypnuto |
1 Nastavení ANSI_WARNINGS on implicitně nastaví ARITHABORT na ON, pokud je úroveň kompatibility databáze nastavena na 90 nebo novější. Pokud je úroveň kompatibility databáze nastavená na hodnotu 80 nebo starší, musíte explicitně nastavit možnost ARITHABORT na hodnotu ON.
Pokud jsou možnosti SET nesprávné, mohou nastat následující podmínky:
Filtrovaný index se nevytvořil.
Databázový stroj vygeneruje chybu a vrátí příkazy INSERT, UPDATE, DELETE nebo MERGE, které mění data v indexu.
Optimalizátor dotazů nebere v plánu provádění index pro žádné příkazy Transact-SQL.
Další informace o filtrovaných indexech naleznete v tématu Vytvoření filtrovaných indexů.
Limity a omezení
Každý sloupec v indexu columnstore musí mít jeden z následujících běžných obchodních datových typů:
- datetimeoffset [ ( n ) ]
- datetime2 [ ( n ) ]
- datum a čas
- smalldatetime
- datum
- time [ ( n ) ]
- float [ ( n ) ]
- real [ ( n ) ]
- decimal [ ( přesnost [ , měřítko ] ) ] ]
- numeric [ ( přesnost [ , měřítko ] ) ]
- peníze
- málo peněz
- bigint
- Int
- smallint
- tinyint
- bit
- nvarchar [ ( n ) ]
- nvarchar(max)1
- nchar [ ( n ) ]
- varchar [ ( n ) ]
- varchar(max)1
- char [ ( n ) ]
- varbinary [ ( n ) ]
- varbinary(max)1
- binary [ ( n ) ]
- uniqueidentifier2
1 platí pro SQL Server 2017 (14.x) a Azure SQL Database na úrovni Premium, úroveň Standard (S3 a vyšší) a všechny úrovně nabídek virtuálních jader pouze v clusterovaných indexech columnstore.
2 platí pro SQL Server 2014 (12.x) a novější verze.
Pokud podkladová tabulka obsahuje sloupec datového typu, který není podporován pro indexy columnstore, musíte tento sloupec vynechat z neclusterovaného indexu columnstore.
Data velkého objektu (LOB) větší než 8 kilobajtů jsou uložená v mimořádkovém úložišti LOB s pouhým ukazatelem na fyzické umístění uložené v rámci segmentu sloupce. Velikost uložených dat není hlášena v sys.column_store_segments, sys.column_store_dictionaries nebo sys.dm_db_column_store_row_group_physical_stats.
Sloupce, které používají některý z následujících datových typů, nelze zahrnout do indexu columnstore:
- ntext, text a obrázek
- nvarchar(max), varchar(max), and varbinary(max)1
- rowversion (a časové razítko)
- sql_variant
- Typy CLR (hierarchyid a prostorové typy)
- xml
- uniqueidentifier2
1 platí pro SQL Server 2016 (13.x) a předchozí verze a neclusterované indexy columnstore.
2 platí pro SQL Server 2012 (11.x).
Neclusterované indexy columnstore:
- Nemůže obsahovat více než 1 024 sloupců.
- Nelze vytvořit jako index založený na omezeních. U tabulky s indexem columnstore je možné mít jedinečná omezení, omezení primárního klíče a omezení cizího klíče. Omezení se vždy vynucují pomocí indexu úložiště řádků. Omezení nelze vynutit pomocí indexu columnstore (clusterovaný nebo neclusterovaný).
- Nelze zahrnout řídký sloupec.
- Nelze změnit pomocí příkazu ALTER INDEX. Pokud chcete změnit neclusterovaný index, musíte místo toho odstranit a znovu vytvořit index columnstore. Alter INDEX můžete použít k zakázání a opětovnému sestavení indexu columnstore.
- Nelze vytvořit pomocí klíčového slova INCLUDE.
- V seznamu sloupců indexu
ASC
nelze zadat klíčová slova aniDESC
klíčová slova. Indexy columnstore jsou seřazené podle algoritmů komprese. - Ve službě Azure SQL Database je možné databázi SQL v Microsoft Fabric, službě Azure SQL Managed InstanceAUTD a SQL Serveru 2025 (17.x) Ve verzi Preview objednat zahrnutím
ORDER
klauzule. Další informace najdete v sekci Ladění výkonu se seřazenými indexy typu columnstore. - Do neclusterovaných indexů columnstore nelze zahrnout sloupce typu nvarchar(max), varchar(max) a varbinary(max). Pouze clusterované indexy columnstore podporují obchodní typy, počínaje verzí SQL Serveru 2017 (14.x), Azure SQL Database (nakonfigurované na úrovni Premium, úroveň Standard (S3 a vyšší) a všechny úrovně nabídek virtuálních jader). Předchozí verze nepodporují obchodní typy v clusterovaných a neclusterovaných indexech columnstore.
- Počínaje SQL Serverem 2016 (13.x) můžete vytvořit neclusterovaný index columnstore v indexovaném zobrazení.
Indexy columnstore nelze kombinovat s následujícími funkcemi:
- Počítané sloupce. Počínaje SQL Serverem 2017 (14.x) může clusterovaný index columnstore obsahovat nezachovaný počítaný sloupec. V SQL Serveru 2017 (14.x) však clusterované indexy columnstore nemohou obsahovat trvalé počítané sloupce a ve vypočítaných sloupcích nemůžete vytvářet neclusterované indexy.
- Komprese stránek a řádků a formát úložiště vardecimal (Index columnstore je již komprimován v jiném formátu.)
- Replikace s clusterovanými indexy columnstore Podporují se neclusterované indexy columnstore. Další informace najdete v tématu sp_addarticle.
- Filestream.
V tabulce s clusterovaným indexem columnstore nemůžete použít kurzory ani triggery. Toto omezení neplatí pro neclusterované indexy columnstore. V tabulce s neclusterovaným indexem columnstore můžete použít kurzory a triggery.
Specifická omezení SQL Serveru 2014 (12.x):
Následující omezení platí jenom pro SQL Server 2014 (12.x). V této verzi můžete použít aktualizovatelné clusterované indexy columnstore. Neclusterované indexy columnstore jsou stále jen pro čtení.
- Sledování změn Sledování změn nemůžete použít s indexy columnstore.
- Změna zachytávání dat Tuto funkci nelze povolit u tabulek s clusterovaným indexem columnstore. Počínaje SQL Serverem 2016 (13.x) je možné povolit zachytávání dat změn u tabulek s neclusterovaným indexem columnstore.
- Čitelné sekundární. K clusteru indexu columnstore (CCI) nemůžete získat přístup ze čitelné sekundární skupiny dostupnosti AlwaysOn pro čtení. K neclusterovanému indexu columnstore (NCCI) můžete přistupovat ze sekundární čitelné oblasti.
- Několik aktivních sad výsledků (MARS). SQL Server 2014 (12.x) používá tuto funkci pro připojení jen pro čtení k tabulkám s indexem columnstore. SQL Server 2014 (12.x) ale tuto funkci nepodporuje pro souběžné operace jazyka pro manipulaci s daty (DML) v tabulce s indexem columnstore. Pokud se pokusíte použít funkci pro tento účel, SQL Server ukončí připojení a zruší transakce.
- Neclusterované indexy columnstore nelze vytvořit v zobrazení nebo indexované zobrazení.
Informace o výhodách výkonu a omezeních indexů columnstore najdete v tématu Indexy Columnstore: Přehled.
Metadatové informace
Všechny sloupce v indexu columnstore jsou uloženy v metadatech jako zahrnuté sloupce. Index columnstore nemá klíčové sloupce. Následující systémová zobrazení poskytují informace o indexech columnstore:
- sys.indexes (Transact-SQL)
- sys.index_columns (Transact-SQL)
- sys.partitions (Transact-SQL)
- sys.column_store_segments (Transact-SQL)
- sys.column_store_dictionaries (Transact-SQL)
- sys.column_store_row_groups (Transact-SQL)
Příklady: Převod tabulky z úložiště řádků na columnstore
A. Převod haldy na clusterovaný index columnstore
Tento příklad vytvoří tabulku jako haldu a pak ji převede na clusterovaný index columnstore s názvem cci_Simple
. Vytvoření clusterovaného indexu columnstore změní úložiště pro celou tabulku z rowstore na columnstore.
CREATE TABLE dbo.SimpleTable(
ProductKey [INT] NOT NULL,
OrderDateKey [INT] NOT NULL,
DueDateKey [INT] NOT NULL,
ShipDateKey [INT] NOT NULL);
GO
CREATE CLUSTERED COLUMNSTORE INDEX cci_Simple ON dbo.SimpleTable;
GO
B. Převod clusterovaného indexu na clusterovaný index columnstore se stejným názvem
Tento příklad vytvoří tabulku s clusterovaným indexem a pak předvádí syntaxi převodu clusterovaného indexu na clusterovaný index columnstore. Vytvoření clusterovaného indexu columnstore změní úložiště pro celou tabulku z rowstore na columnstore.
CREATE TABLE dbo.SimpleTable2 (
ProductKey [INT] NOT NULL,
OrderDateKey [INT] NOT NULL,
DueDateKey [INT] NOT NULL,
ShipDateKey [INT] NOT NULL);
GO
CREATE CLUSTERED INDEX cl_simple ON dbo.SimpleTable2 (ProductKey);
GO
CREATE CLUSTERED COLUMNSTORE INDEX cl_simple ON dbo.SimpleTable2
WITH (DROP_EXISTING = ON);
GO
C. Zpracování neclusterovaných indexů při převodu tabulky rowstore na index columnstore
Tento příklad ukazuje, jak zpracovat neclusterované indexy při převodu tabulky rowstore na index columnstore. Počínaje SQL Serverem 2016 (13.x) není nutná žádná zvláštní akce. SQL Server automaticky definuje a znovu sestaví neclusterované indexy v novém clusterovém indexu columnstore.
Pokud chcete odstranit neclusterované indexy, před vytvořením indexu columnstore použijte příkaz DROP INDEX. Možnost DROP EXISTING zahodí pouze clusterovaný index, který se převádí. Nezahodí neclusterované indexy.
V SQL Serveru 2012 (11.x) a SQL Serveru 2014 (12.x) nemůžete vytvořit neclusterovaný index pro index columnstore.
--Create the table for use with this example.
CREATE TABLE dbo.SimpleTable (
ProductKey [INT] NOT NULL,
OrderDateKey [INT] NOT NULL,
DueDateKey [INT] NOT NULL,
ShipDateKey [INT] NOT NULL);
GO
--Create two nonclustered indexes for use with this example
CREATE INDEX nc1_simple ON dbo.SimpleTable (OrderDateKey);
CREATE INDEX nc2_simple ON dbo.SimpleTable (DueDateKey);
GO
Pouze pro SQL Server 2012 (11.x) a SQL Server 2014 (12.x), musíte odstranit neclusterované indexy, aby bylo možné vytvořit index columnstore.
DROP INDEX dbo.SimpleTable.nc1_simple;
DROP INDEX dbo.SimpleTable.nc2_simple;
--Convert the rowstore table to a columnstore index.
CREATE CLUSTERED COLUMNSTORE INDEX cci_simple ON dbo.SimpleTable;
GO
D. Převod velké tabulky faktů z rowstore na columnstore
Tento příklad vysvětluje, jak převést velkou tabulku faktů z tabulky rowstore na tabulku columnstore.
Vytvořte malou tabulku, která se použije v tomto příkladu.
--Create a rowstore table with a clustered index and a nonclustered index. CREATE TABLE dbo.MyFactTable ( ProductKey [INT] NOT NULL, OrderDateKey [INT] NOT NULL, DueDateKey [INT] NOT NULL, ShipDateKey [INT] NOT NULL INDEX IDX_CL_MyFactTable CLUSTERED ( ProductKey ) ); --Add a nonclustered index. CREATE INDEX my_index ON dbo.MyFactTable ( ProductKey, OrderDateKey );
Odstraňte všechny neclusterované indexy z tabulky rowstore. Indexy můžete chtít skriptovat a později je znovu vytvořit.
--Drop all nonclustered indexes DROP INDEX my_index ON dbo.MyFactTable;
Převeďte tabulku rowstore na tabulku columnstore s clusterovaným indexem columnstore.
Nejprve vyhledejte název existujícího clusterovaného indexu rowstore. V kroku 1 nastavíme název indexu na
IDX_CL_MyFactTable
hodnotu . Pokud nebyl zadán název indexu, zadal se automaticky vygenerovaný jedinečný název indexu. Automaticky vygenerovaný název můžete načíst pomocí následujícího ukázkového dotazu:SELECT i.object_id, i.name, t.object_id, t.name FROM sys.indexes i INNER JOIN sys.tables t ON i.object_id = t.object_id WHERE i.type_desc = 'CLUSTERED' AND t.name = 'MyFactTable';
Možnost 1: Odstraňte existující clusterovaný index
IDX_CL_MyFactTable
a převeďteMyFactTable
na columnstore. Změňte název nového clusterovaného indexu columnstore.--Drop the clustered rowstore index. DROP INDEX [IDX_CL_MyFactTable] ON dbo.MyFactTable; GO --Create a new clustered columnstore index with the name MyCCI. CREATE CLUSTERED COLUMNSTORE INDEX IDX_CCL_MyFactTable ON dbo.MyFactTable; GO
Možnost 2: Převeďte na columnstore a znovu použijte existující název clusterovaného indexu rowstore.
--Create the clustered columnstore index, --replacing the existing rowstore clustered index of the same name CREATE CLUSTERED COLUMNSTORE INDEX [IDX_CL_MyFactTable] ON dbo.MyFactTable WITH (DROP_EXISTING = ON);
E. Převod tabulky columnstore na tabulku rowstore s clusterovaným indexem
Pokud chcete převést tabulku columnstore na tabulku rowstore s clusterovaným indexem, použijte příkaz CREATE INDEX s možností DROP_EXISTING.
CREATE CLUSTERED INDEX [IDX_CL_MyFactTable]
ON dbo.[MyFactTable] ( ProductKey )
WITH ( DROP_EXISTING = ON );
F. Převod tabulky columnstore na haldu úložiště řádků
Pokud chcete převést tabulku columnstore na haldu rowstore, odstraňte clusterovaný index columnstore. Obvykle se to nedoporučuje, ale některé můžou mít úzké použití. Další informace o haldách najdete v tématu Haldy (tabulky bez clusterovaných indexů).
DROP INDEX [IDX_CL_MyFactTable]
ON dbo.[MyFactTable];
G. Defragmentace opětovným uspořádáním indexu columnstore
Clusterovaný index columnstore můžete udržovat dvěma způsoby. Počínaje SQL Serverem 2016 (13.x) použijte ALTER INDEX...REORGANIZE
místo funkce REBUILD. Další informace naleznete v tématu Columnstore index rowgroup. V předchozíchverzích Transact-SQL DROP_EXISTING ch Obě metody dosáhly stejných výsledků.
Začněte určením názvu clusterovaného indexu columnstore v MyFactTable
souboru .
SELECT i.object_id, i.name, t.object_id, t.name
FROM sys.indexes i
INNER JOIN sys.tables t on i.object_id = t.object_id
WHERE i.type_desc = 'CLUSTERED COLUMNSTORE'
AND t.name = 'MyFactTable';
Odeberte fragmentaci provedením reorganizace v indexu columnstore.
--Rebuild the entire index by using ALTER INDEX and the REBUILD option.
ALTER INDEX IDX_CL_MyFactTable
ON dbo.[MyFactTable]
REORGANIZE;
Příklady pro neclusterované indexy columnstore
A. Vytvoření indexu columnstore jako sekundárního indexu v tabulce rowstore
Tento příklad vytvoří neclusterovaný index columnstore v tabulce rowstore. V této situaci je možné vytvořit pouze jeden index columnstore. Index columnstore vyžaduje dodatečné úložiště, protože obsahuje kopii dat v tabulce rowstore. Tento příklad vytvoří jednoduchou tabulku a clusterovaný index rowstore a pak demonstruje syntaxi vytvoření neclusterovaného indexu columnstore.
CREATE TABLE dbo.SimpleTable (
ProductKey [INT] NOT NULL,
OrderDateKey [INT] NOT NULL,
DueDateKey [INT] NOT NULL,
ShipDateKey [INT] NOT NULL);
GO
CREATE CLUSTERED INDEX cl_simple ON dbo.SimpleTable (ProductKey);
GO
CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON dbo.SimpleTable (OrderDateKey, DueDateKey, ShipDateKey);
GO
B. Vytvoření základního neclusterovaného indexu columnstore pomocí všech možností
Následující příklad ukazuje syntaxi vytvoření neclusterovaného indexu columnstore ve skupině souborů DEFAULT, která určuje maximální stupně paralelismu (MAXDOP) jako 2.
CREATE NONCLUSTERED COLUMNSTORE INDEX csindx_simple
ON SimpleTable (OrderDateKey, DueDateKey, ShipDateKey)
WITH (DROP_EXISTING = ON,
MAXDOP = 2)
ON "DEFAULT";
GO
C. Vytvoření neclusterovaného indexu columnstore s filtrovaným predikátem
Následující příklad vytvoří filtrovaný neclusterovaný index columnstore v Production.BillOfMaterials
tabulce v AdventureWorks2022
ukázkové databázi. Predikát filtru může obsahovat sloupce, které nejsou klíčovými sloupci ve filtrovaném indexu. Predikát v tomto příkladu vybere pouze řádky, ve kterých EndDate
není null.
IF EXISTS (SELECT name FROM sys.indexes
WHERE name = N'FIBillOfMaterialsWithEndDate'
AND object_id = OBJECT_ID(N'Production.BillOfMaterials'))
DROP INDEX FIBillOfMaterialsWithEndDate
ON Production.BillOfMaterials;
GO
CREATE NONCLUSTERED COLUMNSTORE INDEX "FIBillOfMaterialsWithEndDate"
ON Production.BillOfMaterials (ComponentID, StartDate)
WHERE EndDate IS NOT NULL;
D. Změna dat v neclusterované indexu columnstore
Platí pro: SQL Server 2012 (11.x) až SQL Server 2014 (12.x).
V SQL Serveru 2014 (12.x) a starších verzích po vytvoření neclusterovaného indexu columnstore v tabulce není možné data v této tabulce přímo upravit. Dotaz s chybou INSERT, UPDATE, DELETE nebo MERGE a vrátí chybovou zprávu. Tady jsou možnosti, které můžete použít k přidání nebo úpravě dat v tabulce:
Zakažte nebo zahoďte index columnstore. Potom můžete aktualizovat data v tabulce. Pokud index columnstore zakážete, můžete index columnstore po dokončení aktualizace dat znovu sestavit. Například:
ALTER INDEX mycolumnstoreindex ON dbo.mytable DISABLE; -- update the data in mytable as necessary ALTER INDEX mycolumnstoreindex on dbo.mytable REBUILD;
Načtěte data do pracovní tabulky, která nemá index columnstore. Vytvořte index columnstore v pracovní tabulce. Přepněte pracovní tabulku do prázdného oddílu hlavní tabulky.
Přepněte oddíl z tabulky s indexem columnstore na prázdnou pracovní tabulku. Pokud je v pracovní tabulce index columnstore, zakažte index columnstore. Proveďte všechny aktualizace. Sestavte (nebo znovu sestavte) index columnstore. Přepněte pracovní tabulku zpět do (nyní prázdného) oddílu hlavní tabulky.
Příklady: Azure Synapse Analytics, Analytics Platform System (PDW)
A. Změna clusterovaného indexu na clusterovaný index columnstore
Pomocí příkazu CREATE CLUSTERED COLUMNSTORE INDEX s DROP_EXISTING = ON můžete:
Změňte clusterovaný index na clusterovaný index columnstore.
Znovu sestavte clusterovaný index columnstore.
Tento příklad vytvoří xDimProduct
tabulku jako tabulku rowstore s clusterovaným indexem. V příkladu se pak pomocí funkce CREATE CLUSTERED COLUMNSTORE INDEX změní tabulka z tabulky rowstore na tabulku columnstore.
-- Uses AdventureWorks
IF EXISTS (SELECT name FROM sys.tables
WHERE name = N'xDimProduct'
AND object_id = OBJECT_ID (N'xDimProduct'))
DROP TABLE xDimProduct;
--Create a distributed table with a clustered index.
CREATE TABLE xDimProduct (ProductKey, ProductAlternateKey, ProductSubcategoryKey)
WITH ( DISTRIBUTION = HASH(ProductKey),
CLUSTERED INDEX (ProductKey) )
AS SELECT ProductKey, ProductAlternateKey, ProductSubcategoryKey FROM DimProduct;
Vyhledejte název clusterovaného indexu automaticky vytvořený pro novou tabulku v systémových metadatech pomocí sys.indexes
. Například:
SELECT i.object_id, i.name, t.object_id, t.name, i.type_desc
FROM sys.indexes i
INNER JOIN sys.tables t ON i.object_id = t.object_id
WHERE i.type_desc = 'CLUSTERED'
AND t.name = 'xdimProduct';
Teď se můžete rozhodnout pro:
- Odstraňte existující clusterovaný index columnstore s automaticky vytvořeným názvem a pak vytvořte nový clusterovaný index columnstore s uživatelem definovaným názvem.
- Odstraňte a nahraďte existující index clusterovaným indexem columnstore, který uchovává stejný systémově vygenerovaný název, například
ClusteredIndex_1bd8af8797f7453182903cc68df48541
.
Například:
--1. DROP the existing clustered columnstore index with an automatically-created name, for example:
DROP INDEX ClusteredIndex_1bd8af8797f7453182903cc68df48541 on xdimProduct;
GO
CREATE CLUSTERED COLUMNSTORE INDEX [<new_index_name>]
ON xdimProduct;
GO
--Or,
--2. Change the existing clustered index to a clustered columnstore index with the same name.
CREATE CLUSTERED COLUMNSTORE INDEX [ClusteredIndex_1bd8af8797f7453182903cc68df48541]
ON xdimProduct
WITH ( DROP_EXISTING = ON );
GO
B. Opětovné sestavení clusterovaného indexu columnstore
Na základě předchozího příkladu tento příklad používá k opětovnému sestavení existujícího clusterovaného indexu columnstore s názvem cci_xDimProduct
CREATE CLUSTERED COLUMNSTORE INDEX .
--Rebuild the existing clustered columnstore index.
CREATE CLUSTERED COLUMNSTORE INDEX cci_xDimProduct
ON xdimProduct
WITH ( DROP_EXISTING = ON );
C. Změna názvu clusterovaného indexu columnstore
Pokud chcete změnit název clusterovaného indexu columnstore, odstraňte existující clusterovaný index columnstore a znovu vytvořte index s novým názvem.
Doporučujeme tuto operaci omezit na malou nebo prázdnou tabulku. Odstranění velkého clusterovaného indexu columnstore a opětovného sestavení s jiným názvem trvá dlouho.
Tento příklad odkazuje na cci_xDimProduct
clusterovaný index columnstore z předchozího příkladu. Tento příklad zahodí cci_xDimProduct
clusterovaný index columnstore a pak znovu vytvoří clusterovaný index columnstore s názvem mycci_xDimProduct
.
--For illustration purposes, drop the clustered columnstore index.
--The table continues to be distributed, but changes to a heap.
DROP INDEX cci_xdimProduct ON xDimProduct;
--Create a clustered index with a new name, mycci_xDimProduct.
CREATE CLUSTERED COLUMNSTORE INDEX mycci_xDimProduct
ON xdimProduct
WITH ( DROP_EXISTING = OFF );
D. Převod tabulky columnstore na tabulku rowstore s clusterovaným indexem
Může se stát, že chcete odstranit clusterovaný index columnstore a vytvořit clusterovaný index. Když zahodíte clusterovaný index columnstore, tabulka se změní na formát rowstore. Tento příklad převede tabulku columnstore na tabulku rowstore se clusterovaným indexem se stejným názvem. Žádná data se neztratí. Všechna data se přejdou do tabulky rowstore a uvedené sloupce se stanou klíčovými sloupci v clusterovém indexu.
--Drop the clustered columnstore index and create a clustered rowstore index.
--All of the columns are stored in the rowstore clustered index.
--The columns listed are the included columns in the index.
CREATE CLUSTERED INDEX cci_xDimProduct
ON xdimProduct (ProductKey, ProductAlternateKey, ProductSubcategoryKey, WeightUnitMeasureCode)
WITH ( DROP_EXISTING = ON);
E. Převedení tabulky columnstore zpět na haldu úložiště řádků
Pomocí drop INDEXu odstraňte clusterovaný index columnstore a převeďte tabulku na haldu úložiště řádků. Tento příklad převede cci_xDimProduct
tabulku na haldu úložiště řádků. Tabulka se dál distribuuje, ale je uložená jako halda.
--Drop the clustered columnstore index. The table continues to be distributed, but changes to a heap.
DROP INDEX cci_xdimProduct ON xdimProduct;
F. Vytvoření uspořádaného clusterovaného indexu columnstore v tabulce bez indexu
Neuspořádaný index columnstore ve výchozím nastavení pokrývá všechny sloupce, aniž by bylo nutné zadat seznam sloupců. Uspořádaný index columnstore umožňuje zadat pořadí sloupců. Seznam nemusí obsahovat všechny sloupce.
Další informace najdete v sekci Ladění výkonu se seřazenými indexy typu columnstore.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
ORDER (SHIPDATE);
G. Převod clusterovaného indexu columnstore na uspořádaný clusterovaný index columnstore
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
ORDER (SHIPDATE)
WITH (DROP_EXISTING = ON);
H. Přidání sloupce do řazení uspořádaného clusterovaného indexu columnstore
Můžete zadat pořadí sloupců v indexu columnstore. Původní seřazený clusterovaný index columnstore byl seřazen pouze ve sloupci SHIPDATE
. Následující příklad přidá PRODUCTKEY
sloupec do řazení. Informace o dostupnosti uspořádaného indexu columnstore najdete v části Indexy Columnstore: Přehled.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
ORDER (SHIPDATE, PRODUCTKEY)
WITH (DROP_EXISTING = ON);
Já. Změna pořadí seřazených sloupců
Původní seřazený clusterovaný index columnstore byl objednán na SHIPDATE
, PRODUCTKEY
. Následující příklad změní pořadí na PRODUCTKEY
, SHIPDATE
. Informace o dostupnosti uspořádaného indexu columnstore najdete v části Indexy Columnstore: Přehled.
CREATE CLUSTERED COLUMNSTORE INDEX cci ON Sales.OrderLines
ORDER (PRODUCTKEY,SHIPDATE)
WITH (DROP_EXISTING = ON);
J. Vytvoření uspořádaného clusterovaného indexu columnstore
Můžete vytvořit clusterovaný index columnstore s klíči řazení. Při vytváření uspořádaného clusterovaného indexu columnstore byste měli použít nápovědu MAXDOP = 1
dotazu pro maximální kvalitu řazení a nejkratší doby trvání. Informace o dostupnosti uspořádaného indexu columnstore najdete v části Indexy Columnstore: Přehled.
CREATE CLUSTERED COLUMNSTORE INDEX [OrderedCCI] ON dbo.FactResellerSalesPartCategoryFull
ORDER (EnglishProductSubcategoryName, EnglishProductName)
WITH (MAXDOP = 1, DROP_EXISTING = ON);