Lezen in het Engels

Delen via


Wat is er nieuw in columnstore-indexen

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-database in Microsoft Fabric

Meer informatie over welke columnstore-functies beschikbaar zijn voor elke versie van SQL Server en de nieuwste versies van SQL Database, Azure Synapse Analytics en Analytics Platform System (PDW).

Functieoverzicht voor productreleases

Deze tabel bevat een overzicht van de belangrijkste functies voor columnstore-indexen en de producten waarin ze beschikbaar zijn.

Kolomopslagindexfunctie 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) SQL Database1 Toegewezen SQL-pool van Azure Synapse Analytics
Batchmodus uitvoeren voor query's met meerdere threads2 ja ja ja ja ja ja ja ja
Uitvoering van batchmodus voor query's met één thread ja ja ja ja ja ja
Optie archiveringscompressie ja ja ja ja ja ja ja
Isolatie van momentopnamen en isolatie van vastgelegde momentopnamen ja ja ja ja ja ja
Columnstore-index opgeven bij het maken van een tabel ja ja ja ja ja ja
AlwaysOn ondersteunt columnstore-indexen ja ja ja ja ja ja ja ja
Always On leesbare secundaire replica ondersteunt alleen-lezen niet-geclusterde columnstore-index ja ja ja ja ja ja ja ja
AlwaysOn leesbare secundaire ondersteunt updatebare columnstore-indexen ja ja ja ja
Alleen-lezen columnstore-index zonder clustering op heap of B-structuur ja ja Ja 3 Ja 3 Ja 3 Ja 3 Ja 3 Ja 3
Updatebare niet-geclusterde columnstore-index op heap of B-tree ja ja ja ja ja ja
Aanvullende B-tree-indexen zijn toegestaan op een heap of B-tree met een niet-geclusterde columnstore-index. ja ja ja ja ja ja ja ja
Updatebare geclusterde columnstore-index ja ja ja ja ja ja ja
B-tree index op een geclusterde columnstore index ja ja ja ja ja ja
Columnstore-index voor een tabel die is geoptimaliseerd voor geheugen ja ja ja ja ja ja
Niet-geclusterde columnstore-indexdefinitie ondersteunt het gebruik van een gefilterde voorwaarde ja ja ja ja ja ja
Optie voor compressievertraging voor columnstore-indexen in CREATE TABLE en ALTER TABLE ja ja ja ja ja ja
Ondersteuning voor het type nvarchar(max) ja ja ja ja geen 4
Columnstore-index kan een niet-persistente berekende kolom bevatten ja ja ja
Ondersteuning voor tuple mover-achtergrondsamenvoeging ja ja ja ja
Geordende geclusterde columnstore-indexen ja ja ja
Geordende niet-geclusterde columnstore-indexen ja

1 Voor SQL Database zijn columnstore-indexen beschikbaar in Azure SQL Database DTU Premium-lagen, DTU Standard-lagen - S3 en hoger, en alle vCore-lagen. Voor SQL Server 2016 (13.x) SP1 en latere versies zijn columnstore-indexen beschikbaar in alle edities. Voor SQL Server 2016 (13.x) (vóór SP1) en eerdere versies zijn columnstore-indexen alleen beschikbaar in Enterprise Edition.

2 De mate van parallelle uitvoering (DOP) voor batchmodus bewerkingen is beperkt tot 2 voor SQL Server Standard Edition en 1 voor SQL Server Web- en Express-edities. Deze beperking verwijst naar columnstore-indexen die zijn gemaakt via schijftabellen en tabellen die zijn geoptimaliseerd voor geheugen.

3 Als u een alleen-lezen niet-geclusterde columnstore-index wilt maken, slaat u de index op in een alleen-lezen bestandsgroep.

4 Niet ondersteund in toegewezen SQL-pools, maar wordt ondersteund in een serverloze SQL-pool.

SQL Server 2022 (16.x)

SQL Server 2022 (16.x) heeft deze functies toegevoegd.

  • Geordende columnstore-indexen verbeteren de prestaties voor query's op basis van geordende kolompredicaten. Geordende columnstore-indexen kunnen de prestaties verbeteren door segmenten van gegevens helemaal over te slaan. Dit kan de IO die nodig is voor het voltooien van query's op columnstore-gegevens drastisch verminderen. Zie segmentuitschakelingvoor meer informatie. Geordende columnstore-indexen voor clusters zijn beschikbaar in SQL Server 2022 (16.x). Voor meer informatie, zie CREATE COLUMNSTORE INDEX en Performance tuning met geordende columnstore indexen.

  • Predicaat pushdown met geclusterde columnstore-rijgroepverwijdering van tekenreeksen maakt gebruik van grenswaarden om tekenreekszoekopdrachten te optimaliseren. Alle columnstore-indexen profiteren van verbeterde segmentuitschakeling per gegevenstype. Vanaf SQL Server 2022 (16.x) zijn deze segmentuitschakelingsmogelijkheden uitgebreid tot tekenreeks-, binaire en GUID-gegevenstypen en het gegevenstype datetimeoffset voor schaal groter dan twee. Voorheen was kolomopslagsegmenteliminatie alleen van toepassing op numerieke gegevenstypen, datum- en tijdgegevenstypen, en het gegevenstype datetimeoffset met een schaal kleiner dan of gelijk aan twee. Nadat u een upgrade hebt uitgevoerd naar een versie van SQL Server die ondersteuning biedt voor het verwijderen van tekenreeksen min/max segment (SQL Server 2022 (16.x) en latere versies), profiteert de columnstore-index pas van deze functie als deze opnieuw wordt opgebouwd met behulp van een REBUILD of DROP/CREATE.

  • Zie Wat is er nieuw in SQL Server 2022voor meer informatie over toegevoegde functies.

SQL Server 2019 (15.x)

Sql Server 2019 (15.x) voegt deze nieuwe functies toe:

Functioneel

Vanaf SQL Server 2019 (15.x) wordt de tuple-mover geholpen door een taak voor het samenvoegen van achtergronden waarmee automatisch kleinere OPEN Delta-rijgroepen worden gecomprimeerd die al enige tijd bestaan, zoals bepaald door een interne drempelwaarde, of worden GECOMPRIMEERDE rijgroepen samengevoegd van waaruit een groot aantal rijen is verwijderd. Voorheen was een herindeling van een index nodig om rijgroepen samen te voegen met gedeeltelijk verwijderde gegevens. Dit verbetert de kwaliteit van de columnstore-index in de loop van de tijd.

SQL Server 2017 (14.x)

SQL Server 2017 (14.x) voegt deze nieuwe functies toe.

Functioneel

  • SQL Server 2017 (14.x) ondersteunt niet-gepersisteerde berekende kolommen in geclusterde columnstore-indexen. Persistente berekende kolommen worden niet ondersteund in geclusterde columnstore-indexen. U kunt geen niet-geclusterde columnstore-index maken voor een berekende kolom.

SQL Server 2016 (13.x)

SQL Server 2016 (13.x) voegt belangrijke verbeteringen toe om de prestaties en flexibiliteit van columnstore-indexen te verbeteren. Deze verbeteringen verbeteren scenario's voor datawarehousing en maken realtime operationele analyses mogelijk.

Functioneel

  • Een rowstore-tabel kan één updatebare niet-geclusterde columnstore-index hebben. Voorheen was de niet-geclusterde columnstore-index alleen lezen.

  • De niet-geclusterde columnstore-indexdefinitie ondersteunt het gebruik van een gefilterde voorwaarde. Als u de gevolgen voor de prestaties van het toevoegen van een columnstore-index aan een OLTP-tabel wilt minimaliseren, gebruikt u een gefilterde voorwaarde om een niet-geclusterde columnstore-index te maken op alleen de koude gegevens van uw operationele workload.

  • Een tabel in het geheugen kan één columnstore-index hebben. U kunt deze maken wanneer de tabel wordt gemaakt of later toevoegen met ALTER TABLE (Transact-SQL). Voorheen kon alleen een tabel op basis van een schijf een columnstore-index hebben.

  • Een geclusterde columnstore-index kan een of meer niet-geclusterde rowstore-indexen hebben. Voorheen biedt de columnstore-index geen ondersteuning voor niet-geclusterde indexen. SQL Server onderhoudt automatisch de niet-geclusterde indexen voor DML-bewerkingen.

  • Ondersteuning voor primaire sleutels en vreemde sleutels met behulp van een B-tree-index om deze beperkingen af te dwingen op een geclusterde columnstore-index.

  • Columnstore-indexen hebben een compressievertragingsoptie waarmee de impact van de transactionele workload op realtime operationele analyses wordt geminimaliseerd. Met deze optie kunnen rijen die vaak veranderen eerst stabiliseren voordat ze in de columnstore worden gecomprimeerd. Zie CREATE COLUMNSTORE INDEX (Transact-SQL) en Aan de slag met Columnstore voor realtime operationele analysesvoor meer informatie.

Prestaties voor databasecompatibiliteitsniveau 120 of 130

  • Columnstore-indexen bieden ondersteuning voor het lezen van vastgelegde isolatieniveau voor momentopnamen (RCSI) en isolatie van momentopnamen (SI). Dit maakt transactioneel consistente analytische query's mogelijk zonder vergrendelingen.

  • Columnstore ondersteunt indexdefragmentatie door verwijderde rijen te verwijderen zonder dat de index expliciet opnieuw hoeft te worden opgebouwd. De ALTER INDEX ... REORGANIZE-instructie verwijdert verwijderde rijen, op basis van een intern gedefinieerd beleid, uit de columnstore als online bewerking.

  • Columnstore-indexen hebben toegang tot een leesbare secundaire replica met AlwaysOn. U kunt de prestaties voor operationele analyses verbeteren door analysequery's naar een secundaire AlwaysOn-replica te offloaden.

  • Aggregate Pushdown berekent de aggregatiefuncties MIN, MAX, SUM, COUNTen AVG tijdens tabelscans wanneer het gegevenstype niet meer dan 8 bytes gebruikt en geen tekenreeksgegevenstype is. Geaggregeerde pushdown wordt ondersteund met of zonder GROUP BY component voor zowel geclusterde columnstore-indexen als niet-geclusterde columnstore-indexen. Op SQL Server is deze uitbreiding gereserveerd voor Enterprise Edition.

  • Pushdown van tekenreeks-predicaten versnelt query's die tekenreeksen van het type VARCHAR/CHAR of NVARCHAR/NCHAR vergelijken. Dit geldt voor de algemene vergelijkingsoperatoren en omvat operators zoals LIKE die bitmapfilters gebruiken. Dit werkt met alle ondersteunde sorteringen. Op SQL Server is deze uitbreiding gereserveerd voor Enterprise Edition.

  • Verbeteringen voor batchmodusbewerkingen door gebruik te maken van op vector gebaseerde hardwaremogelijkheden. De Database Engine detecteert het CPU-ondersteuningsniveau voor AVX 2 (Advanced Vector Extensions) en SSE 4 (Streaming SIMD Extensions 4) hardware-extensies en gebruikt deze indien ondersteund. Op SQL Server is deze uitbreiding gereserveerd voor Enterprise Edition.

Prestaties voor databasecompatibiliteitsniveau 130

  • Ondersteuning voor het uitvoeren van nieuwe batchmodus voor query's met behulp van een van deze bewerkingen:

    • SORT
    • Aggregaties met meerdere afzonderlijke functies. Enkele voorbeelden: COUNT/COUNT, AVG/SUM, CHECKSUM_AGG, STDEV/STDEVP
    • Venster-aggregatiefuncties: COUNT, COUNT_BIG, SUM, AVG, MIN, MAXen CLR
    • Door de gebruiker gedefinieerde aggregaties van vensters: CHECKSUM_AGG, STDEV, STDEVP, VAR, VARPen GROUPING
    • Analytische aggregatiefuncties van vensters: LAG, LEAD, FIRST_VALUE, LAST_VALUE, PERCENTILE_CONT, PERCENTILE_DISC, CUME_DISTen PERCENT_RANK
  • Query's met één thread die worden uitgevoerd onder MAXDOP 1 of met een serieel queryplan worden uitgevoerd in de batchmodus. Voorheen werden alleen query's met meerdere threads uitgevoerd met batchuitvoering.

  • Voor geheugen geoptimaliseerde tabelquery's kunnen parallelle plannen hebben in de SQL InterOp-modus, zowel bij het openen van gegevens in rowstore als in de columnstore-index.

Ondersteuning

Deze systeemweergaven zijn nieuw voor columnstore:

sys.dm_db_index_physical_stats (Transact-SQL)

Deze OLTP-gebaseerde DMVs in het geheugen bevatten updates voor columnstore:

sys.dm_db_xtp_nonclustered_index_stats (Transact-SQL)

Beperkingen

  • Voor in-memory tabellen moet een columnstore-index alle kolommen bevatten; de columnstore-index kan geen gefilterde voorwaarde hebben.
  • Voor in-memory tabellen worden query's op columnstore-indexen alleen uitgevoerd in de InterOP-modus en niet in de systeemeigen modus in het geheugen. Parallelle uitvoering wordt ondersteund.

Bekende problemen

van toepassing op: SQL Server, Azure SQL Database, Azure SQL Managed Instance, toegewezen SQL-pool van Azure Synapse Analytics

  • Momenteel worden LOB-kolommen (varbinary(max), varchar(max) en nvarchar(max)) in gecomprimeerde columnstore-segmenten niet beïnvloed door DBCC SHRINKDATABASE en DBCC SHRINKFILE.

SQL Server 2014 (12.x)

SQL Server 2014 (12.x) heeft de geclusterde columnstore-index geïntroduceerd als de primaire opslagindeling. Hierdoor zijn reguliere ladingen toegestaan, evenals update-, verwijder- en invoegbewerkingen.

  • De tabel kan een geclusterde columnstore-index gebruiken als primaire tabelopslag. Er zijn geen andere indexen toegestaan in de tabel, maar de geclusterde columnstore-index kan worden bijgewerkt, zodat u regelmatig kunt laden en wijzigingen kunt aanbrengen in afzonderlijke rijen.
  • De niet-geclusterde columnstore-index blijft dezelfde functionaliteit hebben als in SQL Server 2012 (11.x), met uitzondering van extra operators die nu kunnen worden uitgevoerd in de batchmodus. Het is nog steeds niet bij te werken, behalve door opnieuw te bouwen en door partitiewisseling te gebruiken. De niet-geclusterde columnstore-index wordt alleen ondersteund op schijftabellen en niet op tabellen in het geheugen.
  • De geclusterde en niet-geclusterde columnstore-index heeft een archiveringscompressieoptie waarmee de gegevens verder worden gecomprimeerd. De archiveringsoptie is handig voor het verminderen van de gegevensgrootte zowel in het geheugen als op schijf, maar zorgt voor trage queryprestaties. Het werkt goed voor gegevens die niet vaak worden geopend.
  • De geclusterde columnstore-index en de niet-geclusterde columnstore-indexfunctie op een zeer vergelijkbare manier; ze gebruiken dezelfde kolomopslagindeling, dezelfde queryverwerkingsengine en dezelfde set dynamische beheerweergaven. Het verschil is primair versus secundaire indextypen en de niet-geclusterde columnstore-index heeft het kenmerk Alleen-lezen.
  • Deze operators worden uitgevoerd in batchmodus voor query's met meerdere threads: scannen, filteren, projecteren, samenvoegen, groeperen op en alles samenvoegen.

SQL Server 2012 (11.x)

SQL Server 2012 (11.x) heeft de niet-geclusterde columnstore-index geïntroduceerd als een ander indextype voor rowstore-tabellen en batchverwerking voor query's in columnstore-gegevens.

  • Een rowstore-tabel kan één niet-geclusterde columnstore-index hebben.
  • De columnstore-index heeft het kenmerk Alleen-lezen. Nadat u de columnstore-index hebt gemaakt, kunt u de tabel niet bijwerken door INSERT, DELETEen UPDATE bewerkingen; Als u deze bewerkingen wilt uitvoeren, moet u de index verwijderen, de tabel bijwerken en de columnstore-index opnieuw opbouwen. U kunt extra gegevens in de tabel laden met behulp van partitiewisseling. Het voordeel van het schakelen tussen partities is dat u gegevens kunt laden zonder de columnstore-index te verwijderen en opnieuw te bouwen.
  • De columnstore-index vereist altijd extra opslagruimte, meestal een extra 10% over rowstore, omdat er een kopie van de gegevens wordt opgeslagen.
  • Batchverwerking biedt 2x of betere queryprestaties, maar is alleen beschikbaar voor parallelle uitvoering van query's.