Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-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.