sql >> Database >  >> RDS >> Sqlserver

Maak een tabel met compressie in SQL Server (T-SQL)

Wanneer u een tabel in SQL Server maakt, heeft u de mogelijkheid om gegevenscompressie te gebruiken.

Gegevenscompressie helpt de grootte van de database te verkleinen. Het kan ook helpen de prestaties van I/O-intensieve workloads te verbeteren omdat de gegevens op minder pagina's worden opgeslagen, waardoor het aantal pagina's dat query's van schijf moeten lezen, wordt verminderd.

Gebruik hiervoor de DATA_COMPRESSION optie bij het maken van de tabel.

Voorbeeld

Hier is een voorbeeld om te demonstreren.

CREATE TABLE Movies (
    MovieId int IDENTITY(1,1) PRIMARY KEY NOT NULL,
    MovieName nvarchar(200)
    )
WITH (DATA_COMPRESSION = ROW);

In dit geval gebruik ik rijcompressie.

Het volgende maakt gebruik van paginacompressie.

CREATE TABLE Movies (
    MovieId int IDENTITY(1,1) PRIMARY KEY NOT NULL,
    MovieName nvarchar(200)
    )
WITH (DATA_COMPRESSION = PAGE);

Compressie verwijderen

U kunt de compressie verwijderen met behulp van de ALTER TABLE statement om de tabel opnieuw op te bouwen, terwijl NONE . wordt gebruikt als het compressietype.

ALTER TABLE MOVIES
REBUILD WITH (DATA_COMPRESSION = NONE);

Kolomopslagtabellen

Als u columnstore-tabellen gebruikt (tabellen die zijn opgeslagen met een geclusterde columnstore-index), zijn de bovenstaande compressietypen niet van toepassing. In dit geval zijn uw compressie-opties COLUMNSTORE en COLUMNSTORE_ARCHIVE .

Compressieresultaten kunnen variëren

De hoeveelheid compressie die u krijgt, hangt af van de gegevens en het type compressie.

ROW compressie verwijdert bijvoorbeeld onnodige bytes uit de kolomwaarden door ze op te slaan in een formaat met variabele lengte. PAGE compressie daarentegen slaat de herhalende waarden slechts één keer per pagina op en stelt de aanwijzer van de respectieve kolommen op de pagina in.

Soms merkt u misschien dat het comprimeren van een object niet altijd de grootte ervan verkleint, en in sommige gevallen zelfs vergroot zijn grootte.

Dit kan gebeuren als uw kolommen een gegevenstype gebruiken dat niet profiteert van compressie.

Rijcompressie vermindert ook de overhead van metagegevens, maar in sommige gevallen kan de overhead groter zijn dan het oude opslagformaat.

Als uw gegevens vanwege het gegevenstype geen baat hebben bij compressie, is de kans groot dat de overhead een toename van de opslagvereisten veroorzaakt in plaats van een afname.

Maar variaties in compressiegrootte zijn ook afhankelijk van de feitelijke gegevens. Als u bijvoorbeeld een char(10) kolom, zal compressie alle achterliggende opvultekens verwijderen. Als je veel rijen met opvultekens achteraan hebt, zou je een beter resultaat moeten krijgen dan wanneer je geen (of weinig) rijen hebt met opvultekens achteraan.


  1. Vernieuwen van SQL Server-tabellen met minder onderbrekingen met behulp van Partition Switching

  2. Hoe krijg ik een datum in de indeling JJJJ-MM-DD uit een TSQL-datetime-veld?

  3. Opdrachten lopen niet synchroon; je kunt deze opdracht nu niet uitvoeren

  4. Bent u gesorteerd? Tips met betrekking tot het bestellen van T-SQL-vensters