sql >> Database teknologi >  >> RDS >> Sqlserver

Komprimer en specifik partition i en tabel i SQL Server (T-SQL)

Når du komprimerer en partitioneret tabel i SQL Server, kan du komprimere alle partitioner, nogle eller kun én partition.

For at gøre dette skal du bruge REBUILD PARTITION syntaks i ALTER TABLE udmelding.

Når du gør dette, kan du kun genopbygge den angivne partition eller alle partitioner. Alternativt kan du genopbygge alle partitioner, mens du kun komprimerer en specifik partition eller liste over partitioner.

Eksempel 1 – Genopbyg én partition

I dette første eksempel genopbygger og komprimerer vi kun én partition i tabellen.

Estimer kompressionsbesparelser

Forestil dig, at vi ønsker at komprimere en enkelt partition i en tabel kaldet Movies .

For det første kan vi bruge sp_estimate_data_compression_savings systemlagret procedure til at estimere de besparelser, vi ville få ved at komprimere tabellen.

EXEC sp_estimate_data_compression_savings 
    @schema_name = 'dbo', 
    @object_name = 'Movies', 
    @index_id = NULL, 
    @partition_number = 3, 
    @data_compression = 'ROW'; 

Resultat (ved hjælp af lodret output):

objektnavn | Filmskema_navn | dboindex_id | 1partitionsnummer | 3size_with_current_compression_setting(KB) | 120size_with_requested_compression_setting(KB) | 88sample_size_with_current_compression_setting(KB) | 128sample_size_with_requested_compression_setting(KB) | 96

Ifølge sp_estimate_data_compression_savings , skal partitionsstørrelsen reduceres fra 120 KB til 88 KB, når vi har komprimeret den.

Komprimer partitionen

Lad os gå videre og komprimere det.

ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = ROW); 

I dette tilfælde brugte jeg rækkekompression.

Bekræft kompressionsbesparelserne

Hvis vi nu forespørger sp_estimate_data_compression_savings igen, vi vil se, at den nuværende størrelse nu er nøjagtig som tidligere anslået (88 KB).

EXEC sp_estimate_data_compression_savings 
    @schema_name = 'dbo', 
    @object_name = 'Movies', 
    @index_id = NULL, 
    @partition_number = 3, 
    @data_compression = 'NONE'; 

Resultat (ved hjælp af lodret output):

objektnavn | Filmskema_navn | dboindex_id | 1partitionsnummer | 3size_with_current_compression_setting(KB) | 88size_with_requested_compression_setting(KB) | 112sample_size_with_current_compression_setting(KB) | 96sample_size_with_requested_compression_setting(KB) | 128

I dette eksempel får jeg et skøn over pladsbehovet, hvis jeg skulle fjerne komprimeringen (dvs. indstille den til NONE ).

Bekræft, hvilke partitioner der bruger komprimering

Vi kan også bruge sys.partitions visning for at bekræfte, at partitionen har komprimering.

SELECT
    [partition_number],
    [data_compression],
    [data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies'); 

Resultat:

+--------------------+--------------------+---- ----------------------+| partitionsnummer | datakomprimering | data_compression_desc ||---------------------+-------------------+----- --------------------|| 1 | 0 | INGEN || 2 | 0 | INGEN || 4 | 0 | INGEN || 3 | 1 | RÆKKE |+--------------------+---------------------+----- --------------------+

Fjern kompression

Før vi går videre til eksempel 2, lad os fjerne komprimeringen fra partitionen.

ALTER TABLE Movies
REBUILD PARTITION = 3 WITH (DATA_COMPRESSION = NONE); 

Eksempel 2 – Komprimer flere partitioner

I dette eksempel genopbygger vi alle partitioner, men specificerer kun de partitioner, vi ønsker skal komprimeres.

Dette er en alternativ metode til vores første eksempel. Ved at bruge denne syntaks kan vi angive en liste over partitioner, der skal komprimeres.

ALTER TABLE Movies
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW ON PARTITIONS(2,3)); 

I dette tilfælde genopbyggede jeg alle partitioner, men jeg komprimerede kun partition 2 og 3.

Igen kan vi bruge sys.partitions for at bekræfte, at de var komprimeret.

SELECT
    [partition_number],
    [data_compression],
    [data_compression_desc]
FROM sys.partitions
WHERE object_id = OBJECT_ID('Movies'); 

Resultat:

+--------------------+--------------------+---- ----------------------+| partitionsnummer | data_komprimering | data_compression_desc ||---------------------+-------------------+----- --------------------|| 1 | 0 | INGEN || 2 | 1 | RÆKKE || 3 | 1 | RÆKKE || 4 | 0 | INGEN |+---------------------+--------------------+----- --------------------+


  1. Vis værdier fra en MySQL-databasetabel inde i en HTML-tabel på en webside

  2. VarBinary vs Image SQL Server-datatype til lagring af binære data?

  3. Brug af ODBC med Salesforce og Okta Single Sign On (SSO)

  4. Importer CSV til MySQL