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
Spravovaná instance
Azure SQLPdW (Analytics Platform System)
Databáze SQL v Microsoft Fabric
Indexy columnstore společně s dělením jsou nezbytné pro vytvoření datového skladu SQL Serveru. Tento článek se zaměřuje na klíčové případy použití a příklady návrhů datových skladů pomocí databázového stroje SQL.
Klíčové funkce pro datové sklady
SQL Server 2016 (13.x) zavedl tyto funkce pro vylepšení výkonu columnstore:
- Skupiny dostupnosti AlwaysOn podporují dotazování indexu columnstore na čitelné sekundární replice.
- Několik aktivních sad výsledků (MARS) podporuje indexy sloupcového úložiště.
- Nové zobrazení dynamické správy sys.dm_db_column_store_row_group_physical_stats (Transact-SQL) poskytuje informace o řešení potíží s výkonem na úrovni skupiny řádků.
- Všechny dotazy na indexy columnstore se můžou spouštět v dávkovém režimu. Dříve se v dávkovém režimu mohly spouštět pouze paralelní dotazy.
- Operátory Sort, Distinct Sort a Distinct se spouštějí v dávkovém režimu.
- Agregace oken se teď spouští v dávkovém režimu pro úroveň kompatibility databáze 130 a vyšší.
- Agregační odsdílení pro efektivní zpracování agregací To je podporováno na všech úrovních kompatibility databáze.
- Odsadení predikátu řetězců pro efektivní zpracování predikátů řetězců To je podporováno na všech úrovních kompatibility databáze.
- Izolace snímků pro úroveň kompatibility databáze 130 a vyšší
- Uspořádané clusterované indexy columnstore byly zavedeny s SQL Serverem 2022 (16.x). Další informace najdete v článku CREATE COLUMNSTORE INDEX a Ladění výkonu pomocí uspořádaných indexů columnstore. Pro dostupnost seřazeného columnstore indexu, viz Dostupnost seřazeného indexu sloupcového úložiště.
Další informace o nových funkcích ve verzích a platformách SQL Serveru a Azure SQL najdete v tématu Novinky v indexech columnstore.
Zvýšení výkonu kombinováním neclusterovaných indexů a indexů columnstore
Počínaje SQL Serverem 2016 (13.x) můžete vytvářet neklastrované indexy úložiště řádků na klastrovaném sloupcovém indexu.
Příklad: Zlepšení efektivity hledání tabulek pomocí neclusterovaného indexu
Pokud chcete zvýšit efektivitu hledání tabulek v datovém skladu, můžete vytvořit neclusterovaný index navržený ke spouštění dotazů, které nejlépe fungují s hledáním tabulek. Například dotazy, které hledají odpovídající hodnoty, nebo vrací malou oblast hodnot, fungují lépe s indexem B-tree místo indexu columnstore. Nevyžadují úplnou kontrolu indexu columnstore a vrací správný výsledek rychleji provedením binárního vyhledávání prostřednictvím indexu B-tree.
--BASIC EXAMPLE: Create a nonclustered index on a columnstore table.
--Create the table
CREATE TABLE t_account (
AccountKey int NOT NULL,
AccountDescription nvarchar (50),
AccountType nvarchar(50),
UnitSold int
);
--Store the table as a columnstore.
CREATE CLUSTERED COLUMNSTORE INDEX taccount_cci ON t_account;
--Add a nonclustered index.
CREATE UNIQUE INDEX taccount_nc1 ON t_account (AccountKey);
Příklad: Použití neclusterovaného indexu k vynucení omezení primárního klíče v tabulce columnstore
Protože tabulka může mít maximálně jeden clusterovaný index, tabulka s clusterovaným indexem columnstore nemůže mít omezení clusterovaného primárního klíče. Pokud chcete vytvořit omezení primárního klíče v tabulce columnstore, musíte ho deklarovat jako neclusterované.
Následující příklad vytvoří tabulku s omezením neklastrovaného primárního klíče a poté vytvoří clusterovaný columnstore index na této tabulce. Vzhledem k tomu, že jakékoli vložení nebo aktualizace v tabulce columnstore také upraví neclusterovaný index, všechny operace, které porušují omezení primárního klíče, způsobí selhání celé operace.
--Create a primary key constraint on a columnstore table.
--Create a rowstore table with a nonclustered primary key constraint.
CREATE TABLE t_account (
AccountKey int NOT NULL,
AccountDescription nvarchar (50),
AccountType nvarchar(50),
UnitSold int,
CONSTRAINT pk_account PRIMARY KEY NONCLUSTERED (AccountKey)
);
--Convert the table to columnstore.
--The primary key constraint is preserved as a nonclustered index on the columnstore table.
CREATE CLUSTERED COLUMNSTORE INDEX t_account_cci ON t_account;
Zvýšení výkonu povolením uzamčení na úrovni řádků a skupin řádků
SQL Server 2016 (13.x) nabízí funkci podrobného zamykání operací SELECT, UPDATE, a DELETE, které doplňují neclusterovaný index funkce indexu columnstore. Dotazy mohou běžet se zamykáním na úrovni řádků při prohledávání indexů v neklastrovaném indexu a se zamykáním na úrovni skupin řádků při celkovém prohledávání tabulky se sloupcovým indexem. Pomocí tohoto příkazu dosáhnete vyšší souběžnosti čtení a zápisu pomocí zamykání na úrovni řádků a skupiny řádků.
--Granular locking example
--Store table t_account as a columnstore table.
CREATE CLUSTERED COLUMNSTORE INDEX taccount_cci ON t_account
--Add a nonclustered index for use with this example
CREATE UNIQUE INDEX taccount_nc1 ON t_account (AccountKey);
--Look at locking with access through the nonclustered index
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRAN
-- The query plan chooses a seek operation on the nonclustered index
-- and takes the row lock
SELECT *
FROM t_account
WHERE AccountKey = 100;
COMMIT TRAN;
Izolace snímků a režim čtení po potvrzení snímků
Použijte izolaci snímků (SI) k zajištění transakční konzistence a izolaci snímků při potvrzeném čtení (RCSI) k zajištění konzistence na úrovni příkazů pro dotazy na indexy columnstore. To umožňuje spouštění dotazů bez blokování zapisovačů dat. Toto neblokující chování také výrazně snižuje pravděpodobnost zablokování u složitých transakcí. Další informace najdete v tématu Úrovně izolace založené na správě verzí řádků v databázovém stroji.