Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance
Azure SQLDatabáze SQL v Microsoft Fabric
Tento článek shrnuje, jak databázový stroj implementuje kompresi řádků. Tento souhrn obsahuje základní informace, které vám pomůžou naplánovat prostor úložiště, který potřebujete pro vaše data.
Povolení komprese změní pouze formát fyzického úložiště dat přidružených k datovému typu, ale ne jeho syntaxi nebo sémantiku. Změny aplikace se nevyžadují, pokud je povolená komprese jedné nebo více tabulek. Nový formát úložiště záznamů má následující hlavní změny:
Snižuje režii na metadata přidruženou k záznamu. Tato metadata jsou informace o sloupcích, jejich délkách a posunech. V některých případech můžou být režijní náklady na metadata větší než starý formát úložiště.
Používá formát úložiště s proměnnou délkou pro číselné typy (například celé číslo, desetinné číslo a float) a typy založené na číselném formátu (například datetime a money).
Ukládá pevné řetězce znaků pomocí formátu proměnné délky tak, že neukládá prázdné znaky.
Poznámka:
NULL a 0 hodnoty napříč všemi datovými typy jsou optimalizované a nepřebírají žádné bajty.
Vliv komprese řádků na úložiště
Následující tabulka popisuje, jak komprese řádků ovlivňuje existující typy v SQL Serveru a Azure SQL Database. Tabulka nezahrnuje úspory, které lze dosáhnout pomocí komprese stránky.
| Datový typ | Týká se úložiště? | Description |
|---|---|---|
| tinyint | Ne | Minimální potřebná velikost úložiště je 1 bajt. |
| smallint | Ano | Pokud se hodnota vejde do 1 bajtu, použije se pouze 1 bajt. |
| int | Ano | Používá pouze potřebné bajty. Pokud je například možné hodnotu uložit do 1 bajtu, úložiště přijímá pouze 1 bajt. |
| bigint | Ano | Používá pouze potřebné bajty. Pokud je například možné hodnotu uložit do 1 bajtu, úložiště přijímá pouze 1 bajt. |
| decimal | Ano | Použije pouze potřebné bajty bez ohledu na zadanou přesnost. Pokud je například možné hodnotu uložit ve 3 bajtech, trvá úložiště pouze 3 bajty. Nároky na úložiště jsou přesně stejné jako formát úložiště vardecimal . |
| číselný | Ano | Použije pouze potřebné bajty bez ohledu na zadanou přesnost. Pokud je například možné hodnotu uložit ve 3 bajtech, trvá úložiště pouze 3 bajty. Nároky na úložiště jsou přesně stejné jako formát úložiště vardecimal . |
| bit | Ano | Náklady na metadata to zvyšují na 4 bity. |
| málo peněz | Ano | Používá celočíselné reprezentace dat při použití 4bajtového celého čísla. Hodnota měny se vynásobí hodnotou 10 000 a výsledná celočíselná hodnota se uloží odebráním libovolných číslic za desetinnou čárkou. Tento typ má optimalizaci úložiště podobnou té pro celočíselné typy. |
| peníze | Ano | Používá celočíselnou reprezentaci dat pomocí 8-bytového celého čísla. Hodnota měny se vynásobí hodnotou 10 000 a výsledná celočíselná hodnota se uloží odebráním libovolných číslic za desetinnou čárkou. Tento typ má větší rozsah než smallmoney. Tento typ má optimalizaci úložiště podobnou té pro celočíselné typy. |
| float | Ano | Nejméně významné bajty s nulami se neukládají. Komprese float se vztahuje převážně na nefrakcionální hodnoty v mantise. |
| skutečné | Ano | Nejméně významné bajty s nulami se neukládají. skutečná komprese je většinou použitelná pro nenefrakcionální hodnoty v mantise. |
| smalldatetime | Ne | Používá celočíselnou reprezentaci dat pomocí dvou bajtů celých čísel a je počet dní od 1900-01-01. Pro datovou část smalldatetime neexistuje žádná výhoda komprese řádků.Doba je počet minut od půlnoci. Časové hodnoty, které jsou lehce po 4:00, začínají používat druhý bajt. Pokud se smalldatetime používá pouze k reprezentaci data (což je běžné), je 0.0čas. Komprese šetří 2 bajty uložením času v nejvýznamnějším bajtovém formátu pro kompresi řádků. |
| datetime | Ano | Používá celočíselnou reprezentaci dat s využitím dvou 4-bytových celých čísel. Celočíselná hodnota představuje počet dnů se základním datem 1900-01-01. Prvních 2 bajtů může představovat až rok 2079. Komprese může vždy ušetřit 2 bajty až do tohoto bodu. Každá celočíselná hodnota představuje 3,33 milisekund. Komprese vyčerpá prvních 2 bajty během prvních pěti minut a potřebuje čtvrtý bajt po 4:00. Komprese tedy může ušetřit pouze 1 bajt po 4:00. Když se data a čas zkomprimuje stejně jako jakékoli jiné celé číslo, komprese uloží do data 2 bajty. |
| date | Ne | Používá celočíselnou reprezentaci dat pomocí 3 bajtů. Představuje datum od 0001-01-01. Pro současná data používá komprese řádků všechny 3 bajty. Tím nedojde k žádným úsporám. |
| time | Ne | Používá celočíselnou reprezentaci dat pomocí 3 až 6 bajtů. Existují různé formáty přesnosti, které začínají číslicemi od 0 do 9 a mohou zabírat 3 až 6 bajtů. Komprimované místo se používá takto: Přesnost = 0. Bajty = 3. Každá celočíselná hodnota představuje sekundu. Komprese může vyjádřit čas až do 18:00 pomocí 2 bajtů, což může ušetřit 1 bajt. Přesnost = 1. Bajty = 3. Každá celočíselná hodnota představuje 1/10 sekund. Komprese používá třetí bajt před 2:00. Výsledkem jsou malé úspory. Přesnost = 2. Bajty = 3. Podobně jako v předchozím případě není pravděpodobné, že by se dosáhlo úspor. Přesnost = 3. Bajty = 4. Vzhledem k tomu, že první 3 bajty přijímá 5:00 ráno, tato možnost přináší malé úspory. Přesnost = 4. Bajty = 4. Prvních 3 bajty jsou odebrány během prvních 27 sekund. Neočekává se žádné úspory. Přesnost = 5, bajty = 5. Pátý bajt se použije po 12-poledne. Přesnost = 6 a 7, bajty = 5. Nedosahuje žádných úspor. Přesnost = 8, Bajty = 6. Šestý bajt se použije po 3:00. V úložišti nedochází ke změně kvůli kompresi řádků. Z komprimace časového datového typu se celkově nedají očekávat velké úspory. |
| datetime2 | Ano | Používá celočíselnou reprezentaci dat pomocí 6 až 9 bajtů. Prvních 4 bajtů představuje datum. Počet bajtů potřebných pro čas závisí na přesnosti určeného času. Celočíselná hodnota představuje počet dní od 0001-01-01 horní hranice 12.31.9999. Chcete-li vyjádřit datum v roce 2005, komprese přebírá 3 bajty.Nejsou žádné úspory času, protože umožňuje použití 2 až 4 bajtů pro různé úrovně časové přesnosti. Proto pro přesnost o jednu sekundu používá komprese 2 bajty pro čas, který trvá druhý bajt po 255 sekundách. |
| datetimeoffset | Ano | Podobá se datetime2 s tím rozdílem, že formát má 2 bajty časového pásma (HH:mm).Stejně jako datetime2 může komprese ušetřit 2 bajty. U hodnot časového pásma mm může být 0 tato hodnota ve většině případů. Komprese tedy může ušetřit 1 bajt.Komprese řádků neobsahuje žádné změny v úložišti. |
| znak | Ano | Odeberou se koncové vyplňovací znaky. Databázový stroj vloží stejný znak odsazení bez ohledu na použitou kolaci. |
| varchar | Ne | Žádný efekt. |
| text | Ne | Žádný efekt. |
| nchar | Ano 1 | Koncové výplňové znaky budou odstraněny. Databázový systém vloží stejný vyplňovací znak bez ohledu na použitou kolaci. |
| nvarchar | Bez 1 | Žádný efekt. |
| ntext | Ne | Žádný efekt. |
| binary | Ano | Koncové nuly se odeberou. |
| varbinary | Ne | Žádný efekt. |
| image | Ne | Žádný efekt. |
| kurzoru | Ne | Žádný efekt. |
| časová značka / rowversion | Ano | Používá celočíselnou reprezentaci dat pomocí 8 bajtů. Pro každou databázi je zachován čítač časového razítka a jeho hodnota začíná od 0. To se dá zkomprimovat stejně jako jakákoli jiná celočíselná hodnota. |
| sql_variant | Ne | Žádný efekt. |
| uniqueidentifier | Ne | Žádný efekt. |
| table | Ne | Žádný efekt. |
| xml | Číslo 2 | Žádný efekt. |
| Uživatelem definované typy | Ne | Toto je interně reprezentováno jako varbinární. |
| FILESTREAM | Ne | Toto je interně reprezentováno jako varbinární. |
1 Komprese Unicode podporuje datové typy nchar s pevnou délkou a nvarchar . Hodnoty dat uložené mimo řádek nebo ve sloupcích nvarchar(max) nejsou komprimované. Komprese Unicode není podporovaná pro data nvarchar(max), i když jsou uložená v řádku.
Data mimo řádek nejsou komprimována při povolování komprese dat. Například záznam XML, který je větší než 8 060 bajtů, používá stránky mimo řádky, které nejsou komprimované.