Dela via


Implementering av sidkomprimering

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Den här artikeln sammanfattar hur databasmotorn implementerar sidkomprimering. Den här sammanfattningen innehåller grundläggande information som hjälper dig att planera det lagringsutrymme som du behöver för dina data.

Sidkomprimering fungerar på liknande sätt för tabeller, tabellpartitioner, index och indexpartitioner. Följande beskrivning av sidkomprimering för en tabell gäller lika för sidkomprimering för alla objekttyper. I följande exempel komprimeras teckensträngar, men både prefix- och ordlistekomprimering tillämpar samma principer på andra datatyper.

Komprimering av bladnivån för tabeller och index med sidkomprimering består av de tre åtgärderna i följande ordning:

  1. Radkomprimering
  2. Prefixkomprimering
  3. Komprimering av ordlista

När du använder sidkomprimering komprimeras icke-lövnivåsidor med index med hjälp av endast radkomprimering. Mer information om radkomprimering finns i Implementering av radkomprimering.

Prefixkomprimering

För varje sida som komprimeras använder prefixkomprimering följande steg:

  1. För varje kolumn identifieras ett värde som kan användas för att minska lagringsutrymmet för värdena i varje kolumn.

  2. En rad som representerar prefixvärdena för varje kolumn skapas och lagras i komprimeringsinformationsstrukturen (CI) som omedelbart följer sidhuvudet.

  3. De upprepade prefixvärdena i kolumnen ersätts med en referens till motsvarande prefix. Om värdet på en rad inte exakt matchar det valda prefixvärdet kan en partiell matchning fortfarande anges.

Följande bild visar en exempelsida i en tabell före prefixkomprimering.

diagram över sidan före prefixkomprimering.

Följande bild visar samma sida efter prefixkomprimering. Prefixet flyttas till rubriken och kolumnvärdena ändras till referenser till prefixet.

diagram över sidan efter prefixkomprimering.

I den första kolumnen på den första raden anger värdet 4b att de första fyra tecknen i prefixet (aaab) finns för den raden och även tecknet b. Detta gör det resulterande värdet aaabb, vilket är det ursprungliga värdet.

Komprimering av ordlista

När prefixkomprimering har slutförts tillämpas ordlistekomprimering. Ordlistekomprimering söker efter upprepade värden var som helst på sidan och lagrar dem i CI-området. Till skillnad från prefixkomprimering är ordlistekomprimering inte begränsad till en kolumn. Ordlistekomprimering kan ersätta upprepade värden som inträffar var som helst på en sida. Följande bild visar samma sida efter ordlistekomprimering.

diagram över sidan efter ordlistekomprimering.

Värdet 4b har refererats från olika kolumner på sidan.

När sidkomprimering sker

När en ny tabell skapas som har sidkomprimering sker ingen komprimering. Metadata för tabellen anger dock att sidkomprimering ska användas. När data läggs till på den första datasidan är data radkomprimerade. Eftersom sidan inte är full får du ingen nytta av sidkomprimering. När sidan är full initierar nästa rad som ska läggas till sidkomprimeringsåtgärden. Hela sidan granskas. varje kolumn utvärderas för prefixkomprimering och sedan utvärderas alla kolumner för ordlistekomprimering. Om sidkomprimering har skapat tillräckligt med utrymme på sidan för ytterligare en rad läggs raden till och data är både radkomprimerade och sidkomprimerade. Om utrymmet som uppnås genom sidkomprimering minus det utrymme som krävs för CI-strukturen inte är betydande används inte sidkomprimering för den sidan. Framtida rader får antingen plats på den nya sidan eller, om de inte passar, läggs en ny sida till i tabellen. På samma sätt som den första sidan komprimeras inte den nya sidan.

När en befintlig tabell som innehåller data konverteras till sidkomprimering återskapas och utvärderas varje sida. Om du återskapar alla sidor återskapas tabellen, indexet eller partitionen.

Nästa steg