Megosztás a következőn keresztül:


Sortömörítés implementálása

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Ez a cikk összefoglalja, hogyan valósítja meg az adatbázismotor a sortömörítést. Ez az összefoglalás alapvető információkat tartalmaz, amelyekkel megtervezheti az adatokhoz szükséges tárterületet.

A tömörítés engedélyezése csak az adattípushoz társított adatok fizikai tárolási formátumát módosítja, szintaxisát és szemantikáját nem. Nincs szükség alkalmazásmódosításra, ha egy vagy több tábla engedélyezve van a tömörítéshez. Az új rekordtár formátuma a következő fő változásokat tartalmazza:

  • Csökkenti a rekordhoz társított metaadat-többletterhelést. Ez a metaadat az oszlopokra, azok hosszára és eltolására vonatkozó információk. Bizonyos esetekben a metaadatok többletterhelése nagyobb lehet, mint a régi tárolási formátum.

  • Változó hosszúságú tárolási formátumot használ numerikus típusok (például egész szám, decimális és lebegőpontos) és számon alapuló típusokhoz (például dátum éspénz).

  • Rögzített karaktersorozatokat tárol változó hosszúságú formátumban úgy, hogy nem tárolja az üres karaktereket.

Megjegyzés:

NULL és 0 az összes adattípus értékei optimalizálva vannak, és nem vesznek fel bájtokat.

A sortömörítés hatása a tárolóra

Az alábbi táblázat azt ismerteti, hogyan befolyásolja a sortömörítés az SQL Server és az Azure SQL Database meglévő típusait. A táblázat nem tartalmazza az oldaltömörítéssel elérhető megtakarításokat.

Adattípus Érintett a tárolás? Description
tinyint Nem Az 1 bájt a minimálisan szükséges tárterület.
smallint Igen Ha az érték 1 bájtban van megadva, csak 1 bájtot használ.
int Igen Csak a szükséges bájtokat használja. Ha például egy érték 1 bájtban tárolható, a tárolás csak 1 bájtot vesz igénybe.
bigint Igen Csak a szükséges bájtokat használja. Ha például egy érték 1 bájtban tárolható, a tárolás csak 1 bájtot vesz igénybe.
decimal Igen A megadott pontosságtól függetlenül csak a szükséges bájtokat használja. Ha például egy érték 3 bájtban tárolható, a tárterület csak 3 bájtot vesz igénybe. A tárterület-lábnyom pontosan megegyezik a vardecimális tárolási formátummal.
Numerikus Igen A megadott pontosságtól függetlenül csak a szükséges bájtokat használja. Ha például egy érték 3 bájtban tárolható, a tárterület csak 3 bájtot vesz igénybe. A tárterület-lábnyom pontosan megegyezik a vardecimális tárolási formátummal.
bit Igen A metaadatok többletterhelése ezt 4 bitre teszi.
smallmoney Igen Az egész adatábrázolást egy 4 bájtos egész szám használatával használja. A pénznemérték 10 000-zel van megszorozva, az eredményként kapott egész szám pedig a tizedesvessző utáni számjegyek eltávolításával lesz tárolva. Ez a típus az egész számtípusokhoz hasonló tárolási optimalizálással rendelkezik.
pénz Igen Egész számok ábrázolására 8 bájtos egész számot használ. A pénznemérték 10 000-zel van megszorozva, az eredményként kapott egész szám pedig a tizedesvessző utáni számjegyek eltávolításával lesz tárolva. Ennek a típusnak nagyobb tartománya van, mint a kisösszegű pénznek. Ez a típus az egész számtípusokhoz hasonló tárolási optimalizálással rendelkezik.
float Igen A legkevésbé jelentős, nullákkal befejeződő bájtok nem kerülnek tárolásra. float tömörítés leginkább a mantissa nemfrakciós értékeire alkalmazható.
valódi Igen A legkevésbé jelentős, nullákkal befejeződő bájtok nem kerülnek tárolásra. a valós tömörítés leginkább a mantissa nemfrakciós értékeire alkalmazható.
smalldatetime Nem Két darab 2 bájtos egész szám használatával ábrázolja az egész számokat, és napok számát jelenti a 1900-01-01-től eltelt idő szerint. A smalldatetime dátumrészénél nincs sortömörítési előny.

Az idő az éjfél óta eltelt percek száma. A 4:00-nál valamivel korábbi időértékek a második bájtot használják.

Ha a kisdátum csak dátum (gyakori eset) ábrázolására szolgál, az idő a következő 0.0: . A tömörítés 2 bájtot takarít meg úgy, hogy az időt a sortömörítés legfontosabb bájtformátumában tárolja.
datetime Igen Két 4 bájtos egész szám használatával ábrázolja az egész számokat. Az egész szám az alapdátummal 1900-01-01rendelkező napok számát jelöli. Az első 2 bájt akár az évet 2079is jelentheti. A tömörítés mindig 2 bájtot menthet addig a pillanatig. Minden egész szám értéke 3,33 ezredmásodperc. A tömörítés az első 2 bájtot az első öt percben kimeríti, és 16 óra után a negyedik bájtra van szüksége. Ezért a tömörítés csak 1 bájtot menthet 4PM után. Ha a datetime-et a többi egész számhoz hasonló módon tömörítik, a tömörítés során 2 bájt megtakarítást érnek el a dátumnál.
date Nem Az egész szám adatmegjelenítést 3 bájton használja. Ez a dátumot 0001-01-01jelöli. A mai dátumok esetében a sortömörítés mind a 3 bájtot használja. Ez nem ér el megtakarítást.
time Nem Egész számok ábrázolását 3–6 bájt használatával végzi. Vannak különböző pontosságok, amelyek 0 és 9 között kezdődnek, amelyek 3–6 bájtot is igénybe vehetnek. A tömörített terület a következőképpen használható:

Pontosság = 0. Bájt = 3. Minden egész szám egy másodpercet jelöl. A tömörítés 2 bájt használatával akár 6PM-ig is jelenthet időt, ami akár 1 bájtot is megtakaríthat.

Pontosság = 1. Bájt = 3. Minden egész szám 1/10 másodpercet jelöl. A tömörítés a 2:00 előtti harmadik bájtot használja. Kevés megtakarítást eredményez.

Pontosság = 2. Bájt = 3. Az előző esethez hasonlóan nem valószínű, hogy megtakarítást érhet el.

Pontosság = 3. Bájt = 4. Mivel az első 3 bájtot 5:00-ig veszik fel, ez a beállítás kevés megtakarítást eredményez.

Pontosság = 4. Bájt = 4. Az első 3 bájt az első 27 másodpercben lesz megadva. Nem várható megtakarítás.

Pontosság = 5, bájt = 5. Az ötödik bájt 12 óra után lesz használva.

Pontosság = 6 és 7, bájt = 5. Nem ér el megtakarítást.

Pontosság = 8, bájt = 6. A hatodik bájt 3 óra után lesz használva.

A sortömörítésnél nincs változás a tárolásban. Összességében nem várható sok megtakarítás az idő adattípusának tömörítése során.
datetime2 Igen Az egész szám adatreprezentációt 6–9 bájt használatával alkalmazza. Az első 4 bájt a dátumot jelöli. Az idő által vett bájtok a megadott idő pontosságától függenek.

Az egész szám a 0001-01-01 óta eltelt napok számát jelöli, maximális határa 9999.12.31. A 2005-ös dátum megjelenítéséhez a tömörítés 3 bájtot vesz igénybe.

Nincs időmegtakarítás, mert lehetővé teszi a 2-4 bájt használatát különböző időpontosságokhoz. Ezért egy másodperces pontosság esetén a tömörítés 2 bájtot használ az időhöz, ami 255 másodperc után a második bájtot veszi igénybe.
datetimeoffset Igen Hasonlít a datetime2-hez, azzal a kivételével, hogy a formátum (HH:mm) 2 bájt időzónája van.

A datetime2-hez hasonlóan a tömörítés 2 bájtot is menthet.

Az időzóna értékei esetében a mm érték a legtöbb esetben 0 lehet. Ezért a tömörítés 1 bájtot menthet.

A sortömörítéshez nincs változás a tárolásban.
karakteres Igen A záró kitöltési karaktereket eltávolítják. A használt kollációtól függetlenül az adatbázismotor ugyanazt a kitöltési karaktert szúrja be.
varchar Nem Nincs hatás.
text Nem Nincs hatás.
nchar Igen 1 A záró kitöltési karaktereket eltávolítják. A használt kollációtól függetlenül az adatbázismotor ugyanazt a kitöltési karaktert szúrja be.
nvarchar Nincs 1 Nincs hatás.
kontextus Nem Nincs hatás.
binary Igen A záró nullák el lesznek távolítva.
varbinary Nem Nincs hatás.
image Nem Nincs hatás.
kurzor Nem Nincs hatás.
Időbélyeg / rowversion Igen Az egész számok adatábrázolását 8 bájtos formátumban használja. Az egyes adatbázisokhoz egy időbélyeg-számláló van fenntartva, és az értéke 0-tól kezdődik. Ez úgy tömöríthető, mint bármely más egész szám.
sql_variant Nem Nincs hatás.
uniqueidentifier Nem Nincs hatás.
table Nem Nincs hatás.
xml Nincs 2 Nincs hatás.
Felhasználó által definiált típusok Nem Ez belsőleg varbinárisként jelenik meg.
FILESTREAM Nem Ez belsőleg varbinárisként jelenik meg.

Az 1 Unicode-tömörítés támogatja a rögzített hosszúságú nchar - és nvarchar-adattípusokat . A soron kívül vagy az nvarchar(max) oszlopban tárolt adatértékek nem lesznek tömörítve. A Unicode-tömörítés az nvarchar(max) adatok esetében akkor sem támogatott, ha sorba van helyezve.

2 A soron kívüli adatok nem lesznek tömörítve az adattömörítés engedélyezésekor. Egy 8060 bájtnál nagyobb XML-rekord például soron kívüli oldalakat használ, amelyek nincsenek tömörítve.