Nyheter i kolumnlagringsindex
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-databas i Microsoft Fabric
Lär dig mer om vilka columnstore-funktioner som är tillgängliga för varje version av SQL Server och de senaste versionerna av SQL Database, Azure Synapse Analytics och Analytics Platform System (PDW).
Funktionssammanfattning för produktversioner
Den här tabellen sammanfattar viktiga funktioner för kolumnlagringsindex och de produkter där de är tillgängliga.
Indexfunktion för kolumnlagring | 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) | Azure SQL Database2 och Azure SQL Managed InstanceAUTD | Dedikerad SQL-pool för Azure Synapse Analytics |
---|---|---|---|---|---|---|---|---|
Körning av batchläge för frågor med flera trådar3 | Ja | Ja | Ja | Ja | Ja | Ja | Ja | Ja |
Körning av batchläge för entrådade frågor | Ja | Ja | Ja | Ja | Ja | Ja | ||
Alternativ för arkivkomprimering | Ja | Ja | Ja | Ja | Ja | Ja | Ja | |
Isolering av ögonblicksbilder och skrivskyddad ögonblicksbildisolering | Ja | Ja | Ja | Ja | Ja | Ja | ||
Ange kolumnlagringsindex när du skapar en tabell | Ja | Ja | Ja | Ja | Ja | Ja | ||
AlwaysOn stöder columnstore-index | Ja | Ja | Ja | Ja | Ja | Ja | Ja | Ja |
Always On läsbar sekundär instans stöder skrivskyddat icke-klustrat kolumnlagringsindex | Ja | Ja | Ja | Ja | Ja | Ja | Ja | Ja |
AlwaysOn-läsbar sekundär stöder uppdateringsbara kolumnlagringsindex | Ja | Ja | Ja | Ja | ||||
Skrivskyddat icke-klustrat kolumnlagringsindex på heap eller B+ träd | Ja | Ja | Ja 4 | Ja 4 | Ja 4 | Ja 4 | Ja 4 | Ja 4 |
Uppdateringsbart icke-grupperat kolumnlagringsindex på heap eller B-träd | Ja | Ja | Ja | Ja | Ja | Ja | ||
Ytterligare B-trädindex tillåts på en heap eller ett B-träd som har ett icke-grupperat kolumnlagringsindex | Ja | Ja | Ja | Ja | Ja | Ja | Ja | Ja |
Uppdateringsbart grupperat columnstore-index | Ja | Ja | Ja | Ja | Ja | Ja | Ja | |
B-trädindex på ett grupperat kolumnlagringsindex | Ja | Ja | Ja | Ja | Ja | Ja | ||
Kolumnlagringsindex i en minnesoptimerad tabell | Ja | Ja | Ja | Ja | Ja | Ja | ||
Indexdefinitionen för icke-grupperade columnstore-index stöder användning av ett filtrerat villkor | Ja | Ja | Ja | Ja | Ja | Ja | ||
Komprimeringsfördröjningsalternativ för kolumnlagringsindex i CREATE TABLE och ALTER TABLE |
Ja | Ja | Ja | Ja | Ja | Ja | ||
Stöd för nvarchar(max)-typ | Ja | Ja | Ja | Ja | ingen 5 | |||
Kolumnlagringsindex kan ha en icke-persistent beräknad kolumn | Ja | Ja | Ja | |||||
Stöd för tuple mover bakgrundssammanslagning | Ja | Ja | Ja | Ja | ||||
Ordnade grupperade kolumnlagringsindex | Ja | Ja | Ja | |||||
Ordnade icke-grupperade kolumnlagringsindex | Ja | |||||||
Skapa och återskapa kolumnlagringsindex online | Ja | Ja | ||||||
Skapa och återskapa online beställda kolumnlagringsindex | Ja |
1 För SQL Server 2016 (13.x) SP1 och senare versioner är kolumnlagringsindex tillgängliga i alla utgåvor. För SQL Server 2016 (13.x) (före SP1) och tidigare versioner är kolumnlagringsindex endast tillgängliga i Enterprise Edition.
2 För Azure SQL Database är kolumnlagringsindex tillgängliga på DTU Premium-nivåerna, DTU Standard-nivåerna – S3 och senare och alla vCore-nivåer.
3 Graden av parallellism (DOP) för batchläge operationer är begränsad till 2 för SQL Server Standard Edition och 1 för SQL Server Web och Express Editioner. Den här begränsningen avser kolumnlagringsindex som skapats över diskbaserade tabeller och minnesoptimerade tabeller.
4 För att skapa ett skrivskyddat icke-klustrat kolumnlagerindex, lagra indexet i en skrivskyddad filgrupp.
5 Stöds inte i dedikerade SQL-pooler men stöds i en serverlös SQL-pool.
AUTD gäller för Azure SQL Managed Instance som konfigurerats med Always-up-to-date uppdateringsprincipen.
SQL Server 2022 (16.x)
SQL Server 2022 (16.x) har lagt till följande funktioner:
- Ordnade grupperade kolumnlagringsindex förbättrar prestandan för frågor baserat på ordnade kolumnpredikat. Ordnade kolumnlagringsindex kan förbättra prestandan genom att hoppa över segment av data helt och hållet. Detta kan drastiskt minska den I/O som behövs för att slutföra frågor om kolumnlagringsdata. Mer information finns i segmenteliminering. För mer information, se CREATE COLUMNSTORE INDEX och Prestandaoptimering med ordnade columnstore-index.
- Predikat pushdown med eliminering av radgrupper i klustrade kolumnlagringar använder gränsvärden för att optimera strängsökningar. Alla columnstore-index drar nytta av förbättrad segmenteliminering efter datatyp. Från och med SQL Server 2022 (16.x) utökas dessa segmentelimineringsfunktioner till sträng-, binär- och GUID-datatyper och datetimeoffset datatyp för skalning som är större än två. Tidigare tillämpades kolumnlagringssegment-eliminering endast på numeriska, datum- och tidsdatatyperna och datetimeoffset datatyp med skala mindre än eller lika med två. När du har uppgraderat till en version av SQL Server som stöder strängmin/max segmenteliminering (SQL Server 2022 (16.x) och senare versioner) drar kolumnlagringsindexet inte nytta av den här funktionen förrän den återskapas med hjälp av
ALTER INDEX REBUILD
ellerCREATE INDEX WITH (DROP_EXISTING = ON)
. - Columnstore rowgroup elimination för prefixet av
LIKE
-villkor, till exempelcolumn LIKE 'string%'
. Segmentborttagning stöds inte för icke-prefix användning avLIKE
såsomcolumn LIKE '%string'
. - Mer information om tillagda funktioner finns i Nyheter i SQL Server 2022.
SQL Server 2019 (15.x)
SQL Server 2019 (15.x) lägger till följande nya funktioner:
Funktionell
Från och med SQL Server 2019 (15.x) får tuppelflyttaren hjälp av en bakgrundssammanslagningsaktivitet som automatiskt komprimerar mindre OPEN delta-radgrupper som har funnits under en tid enligt ett internt tröskelvärde, eller sammanfogar KOMPRIMERADE radgrupper där ett stort antal rader har tagits bort. Tidigare behövdes en indexomorganiseringsåtgärd för att sammanfoga radgrupper med delvis borttagna data. Detta förbättrar kolumnlagringsindexets kvalitet över tid.
SQL Server 2017 (14.x)
SQL Server 2017 (14.x) lägger till dessa nya funktioner.
Funktionell
- SQL Server 2017 (14.x) stöder icke-beständiga beräknade kolumner i grupperade kolumnlagringsindex. Beständiga beräknade kolumner stöds inte i grupperade kolumnlagringsindex. Du kan inte skapa ett icke-grupperat kolumnlagringsindex i en beräknad kolumn.
SQL Server 2016 (13.x)
SQL Server 2016 (13.x) lägger till viktiga förbättringar för att förbättra prestanda och flexibilitet för kolumnlagringsindex. Dessa förbättringar förbättrar scenarier för datalagerhantering och möjliggör driftanalys i realtid.
Funktionell
En radlagringstabell kan ha ett uppdateringsbart icke-grupperat kolumnlagringsindex. Tidigare var det icke-klustrerade kolumnlagringsindexet skrivskyddat.
Definitionen av det icke-klustrade kolumnlagringsindexet stöder att använda ett filtrervillkor. För att minimera prestandapåverkan av att lägga till ett kolumnlagringsindex i en OLTP-tabell använder du ett filtrerat villkor för att skapa ett icke-grupperat kolumnlagringsindex på endast kalla data för din driftarbetsbelastning.
En minnesintern tabell kan ha ett kolumnlagringsindex. Du kan skapa den när tabellen skapas eller lägga till den senare med ALTER TABLE (Transact-SQL). Tidigare kunde endast en diskbaserad tabell ha ett columnstore-index.
Ett grupperat kolumnlagringsindex kan ha ett eller flera icke-klustrade radlagringsindex. Tidigare hade kolumnlagringsindexet inte stöd för icke-klustrade index. SQL Server underhåller automatiskt de icke-klustrade indexen för DML-åtgärder.
Stöd för primära nycklar och sekundärnycklar med hjälp av ett B-trädindex för att tillämpa dessa begränsningar på ett grupperat kolumnlagringsindex.
Kolumnlagringsindex har ett alternativ för komprimeringsfördröjning som minimerar effekten av transaktionsarbetsbelastningen på driftanalyser i realtid. Med det här alternativet kan rader som ändras ofta stabiliseras innan de komprimeras i kolumndatalagringen. Mer information finns i CREATE COLUMNSTORE INDEX (Transact-SQL) och Kom igång med Columnstore för driftanalys i realtid.
Prestanda för databaskompatibilitetsnivå 120 eller 130
Columnstore-index stöder skrivskyddade ögonblicksbildisoleringsnivå (RCSI) och ögonblicksbildisolering (SI). Detta möjliggör transaktionskonsekventa analysfrågor utan lås.
Columnstore stöder indexdefragmentering genom att ta bort borttagna rader utan att du uttryckligen behöver återskapa indexet. Instruktionen
ALTER INDEX ... REORGANIZE
tar bort borttagna rader, baserat på en internt definierad princip, från kolumnarkivet som en onlineåtgärdKolumnlagringsindex kan kommas åt på en Always On-läsbar sekundärreplika. Du kan förbättra prestanda för driftanalys genom att avlasta analysfrågor till en Always On-sekundär replik.
Aggregerad Pushdown beräknar aggregatfunktionerna
MIN
,MAX
,SUM
,COUNT
ochAVG
under tabellskanningar när datatypen använder högst 8 byte och inte är en strängdatatyp. Aggregerad pushdown stöds med eller utanGROUP BY
-sats för både klustrade kolumnlagringsindex och icke-klustrade kolumnlagringsindex. På SQL Server är den här förbättringen reserverad för Enterprise-utgåvan.Pushdown för strängpredikat påskyndar frågor som jämför strängar av typen VARCHAR/CHAR eller NVARCHAR/NCHAR. Detta gäller för vanliga jämförelseoperatorer och omfattar operatorer som
LIKE
som använder bitmappsfilter. Detta fungerar med alla sorteringar som stöds. På SQL Server är den här förbättringen reserverad för Enterprise-utgåvan.Förbättringar för batchlägesåtgärder genom att utnyttja vektorbaserade maskinvarufunktioner. Databasmotorn identifierar CPU-stödnivån för maskinvarutillägg av AVX 2 (Advanced Vector Extensions) och SSE 4 (Streaming SIMD Extensions 4) och använder dem om de stöds. På SQL Server är den här förbättringen reserverad för Enterprise-utgåvan.
Prestanda för databaskompatibilitetsnivå 130
Nytt stöd för körning i batch-läge för frågeställningar som använder någon av dessa åtgärder:
SORT
- Aggregat med flera unika funktioner. Några exempel:
COUNT/COUNT
,AVG/SUM
,CHECKSUM_AGG
,STDEV/STDEVP
- Fönsteraggregatfunktioner:
COUNT
,COUNT_BIG
,SUM
,AVG
,MIN
,MAX
ochCLR
- Användardefinierade aggregat för fönster:
CHECKSUM_AGG
,STDEV
,STDEVP
,VAR
,VARP
ochGROUPING
- Analysfunktioner för fönster:
LAG
,LEAD
,FIRST_VALUE
,LAST_VALUE
,PERCENTILE_CONT
,PERCENTILE_DISC
,CUME_DIST
ochPERCENT_RANK
Entrådade frågor som körs under
MAXDOP 1
eller med en seriell frågeplan körs i batchläge. Tidigare var det endast flertrådade sökfrågor som kördes med batchkörning.Minnesoptimerade tabellfrågor kan ha parallella planer i SQL InterOp-läge både vid åtkomst till data i radlager eller i kolumnlagringsindex.
Supportförmåga
Dessa systemvyer är nya för columnstore:
Dessa minnesinterna OLTP-baserade DMV:er innehåller uppdateringar för columnstore:
Begränsningar
- För minnesinterna tabeller måste ett kolumnlagringsindex innehålla alla kolumner. kolumnlagringsindexet kan inte ha ett filtrerat villkor.
- För minnesinterna tabeller körs frågor på kolumnlagringsindex endast i interop-läge och inte i det interna kompileringsläget. Stöd för parallell körning finns.
Kända problem
gäller för: SQL Server, Azure SQL Managed Instance
- För närvarande påverkas inte LOB-kolumner (varbinary(max), varchar(max) och nvarchar(max)) i komprimerade kolumnlagringssegment av
DBCC SHRINKDATABASE
ochDBCC SHRINKFILE
.
SQL Server 2014 (12.x)
SQL Server 2014 (12.x) introducerade det klustrade kolumnlagringsindexet som primärt lagringsformat. Detta tillät regelbundna inläsningar samt uppdaterings-, borttagnings- och infogningsåtgärder.
- Tabellen kan använda ett grupperat kolumnlagringsindex som den primära tabellagringsmetoden. Inga andra index tillåts i tabellen, men det klustrade kolumnlagringsindexet kan uppdateras så att du kan utföra regelbundna inläsningar och göra ändringar i enskilda rader.
- Det icke-klustrade kolumnlagringsindexet fortsätter att ha samma funktionalitet som i SQL Server 2012 (11.x), med undantag av ytterligare operatorer som nu kan köras i batchläge. Det går fortfarande inte att uppdatera förutom genom att återskapa och genom att använda partitionsväxling. Det icke-klustrade kolumnlagringsindexet stöds endast på diskbaserade tabeller och inte på in-memory-tabeller.
- Det klustrade och icke-grupperade kolumnlagringsindexet har ett alternativ för arkiveringskomprimering som ytterligare komprimerar data. Arkiveringsalternativet är användbart för att minska datastorleken både i minnet och på disken, men försämrar frågeprestanda. Det fungerar bra för data som används sällan.
- Det klustrade kolumnlagringsindexet och det icke-klustrade kolumnlagringsindexet fungerar på ett mycket liknande sätt; De använder samma kolumnariska lagringsformat, samma frågebearbetningsmotor och samma uppsättning dynamiska hanteringsvyer. Skillnaden är mellan primära och sekundära indextyper, och det icke-klustrade kolumnlagringsindexet är skrivskyddat.
- Dessa operatorer körs i batchläge för frågor med flera trådar: genomsökning, filtrering, projektion, koppling, gruppering och union all.
SQL Server 2012 (11.x)
SQL Server 2012 (11.x) introducerade det icke-klustrade kolumnlagringsindexet som en alternativ indextyp för radlagringstabeller och batchbearbetning av frågor på kolumnlagringsdata.
- En radlagringstabell kan ha ett icke-grupperat kolumnlagringsindex.
- Kolumnlagringsindexet är skrivskyddat. När du har skapat kolumnlagringsindexet kan du inte uppdatera tabellen genom att
INSERT
,DELETE
ochUPDATE
åtgärder. För att utföra dessa åtgärder måste du släppa indexet, uppdatera tabellen och återskapa kolumnlagringsindexet. Du kan läsa in ytterligare data i tabellen med hjälp av partitionsväxling. Fördelen med partitionsväxling är att du kan lägga till data utan att ta bort och återskapa kolumnlagringsindexet. - Kolumnlagringsindexet kräver alltid extra lagringsutrymme, vanligtvis ytterligare 10% över radsindex, eftersom det lagrar en kopia av datan.
- Batchprocessning ger 2x eller bättre prestanda för frågor, men är bara tillgänglig för parallell bearbetning av frågor.