sql >> Databáze >  >> RDS >> Sqlserver

Vytvoření tabulky s kompresí v SQL Server (T-SQL)

Při vytváření tabulky v SQL Serveru máte možnost použít kompresi dat.

Komprese dat pomáhá zmenšit velikost databáze. Může také pomoci zlepšit výkon I/O náročných pracovních zátěží, protože data jsou uložena na menším počtu stránek, čímž se sníží počet stránek, které dotazy potřebují ke čtení z disku.

K tomu použijte DATA_COMPRESSION možnost při vytváření tabulky.

Příklad

Zde je příklad k demonstraci.

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

V tomto případě používám kompresi řádků.

Následující používá kompresi stránky.

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

Jak odstranit kompresi

Kompresi můžete odstranit pomocí ALTER TABLE pomocí příkazu NONE znovu sestavit tabulku jako typ komprese.

ALTER TABLE MOVIES
REBUILD WITH (DATA_COMPRESSION = NONE);

Tabulky sloupců

Pokud používáte tabulky columnstore (tabulky uložené s seskupeným indexem columnstore), výše uvedené typy komprese neplatí. V tomto případě jsou možnosti komprese COLUMNSTORE a COLUMNSTORE_ARCHIVE .

Výsledky komprese se mohou lišit

Velikost komprese, kterou získáte, bude záviset na datech a typu komprese.

ROW komprese například odstraní nepotřebné bajty z hodnot sloupců jejich uložením ve formátu s proměnnou délkou. PAGE komprese na druhou stranu ukládá opakující se hodnoty pouze jednou na stránku a nastavuje ukazatel z příslušných sloupců na stránce.

Někdy můžete zjistit, že komprimací objektu se ne vždy sníží jeho velikost a v některých případech se může skutečně zvětšit jeho velikost.

K tomu může dojít, pokud vaše sloupce používají datový typ, který nemá prospěch z komprese.

Komprese řádků také snižuje režii metadat, ale v některých případech může být režie větší než u starého formátu úložiště.

Pokud vaše data nemají žádnou výhodu z komprese kvůli jejich datovému typu, pak je pravděpodobné, že režie způsobí spíše zvýšení požadavků na úložiště než snížení.

Ale rozdíly ve velikosti komprese budou také záviset na skutečných datech. Pokud máte například char(10) sloupec, komprese odstraní všechny koncové výplňové znaky. Máte-li mnoho řádků se znaky pro výplň na konci, měli byste dosáhnout lepšího výsledku, než když nemáte žádné (nebo jen málo) řádků se znaky pro výplň na konci.


  1. Používejte relační databáze MySQL na Debianu 6 (Squeeze)

  2. Jak nainstalovat PostgreSQL na macOS

  3. Vizualizace dat

  4. Android Sqlite při upgradu odstraňte tabulku z databáze