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

Creare una tabella con compressione in SQL Server (T-SQL)

Quando crei una tabella in SQL Server, hai la possibilità di utilizzare la compressione dei dati.

La compressione dei dati aiuta a ridurre le dimensioni del database. Può anche aiutare a migliorare le prestazioni dei carichi di lavoro intensivi di I/O a causa del fatto che i dati vengono archiviati in un minor numero di pagine, riducendo quindi il numero di pagine che le query devono leggere dal disco.

Per fare ciò, usa il DATA_COMPRESSION opzione durante la creazione della tabella.

Esempio

Ecco un esempio da dimostrare.

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

In questo caso utilizzo la compressione di riga.

Quanto segue usa la compressione della pagina.

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

Come rimuovere la compressione

Puoi rimuovere la compressione utilizzando ALTER TABLE istruzione per ricostruire la tabella, utilizzando NONE come tipo di compressione.

ALTER TABLE MOVIES
REBUILD WITH (DATA_COMPRESSION = NONE);

Tabelle Colonnine

Se utilizzi tabelle columnstore (tabelle archiviate con un indice columnstore cluster), i tipi di compressione sopra indicati non si applicano. In questo caso, le tue opzioni di compressione sono COLUMNSTORE e COLUMNSTORE_ARCHIVE .

I risultati della compressione possono variare

La quantità di compressione che ottieni dipenderà dai dati e dal tipo di compressione.

ROW la compressione, ad esempio, rimuove i byte non necessari dai valori delle colonne memorizzandoli in un formato a lunghezza variabile. PAGE la compressione, invece, memorizza i valori ripetuti solo una volta per pagina e imposta il puntatore dalle rispettive colonne all'interno della pagina.

A volte potresti scoprire che la compressione di un oggetto non sempre diminuisce le sue dimensioni e in alcuni casi potrebbe effettivamente aumentare la sua dimensione.

Ciò potrebbe accadere se le tue colonne utilizzano un tipo di dati che non beneficia della compressione.

Inoltre, la compressione delle righe riduce l'overhead dei metadati, ma in alcuni casi l'overhead potrebbe essere maggiore del vecchio formato di archiviazione.

Se i tuoi dati non ricevono alcun vantaggio dalla compressione a causa del loro tipo di dati, è probabile che l'overhead provochi un aumento dei requisiti di archiviazione, anziché una diminuzione.

Ma le variazioni nelle dimensioni della compressione dipenderanno anche dai dati effettivi. Ad esempio, se hai un char(10) colonna, la compressione rimuoverà tutti i caratteri di riempimento finali. Se hai molte righe con caratteri di riempimento finali, dovresti ottenere un risultato migliore rispetto a se non hai (o poche) righe con caratteri di riempimento finali.