Implementazione della compressione di paginaPage Compression Implementation

In questo argomento si applica a: SìSQL ServerSìDatabase SQL di AzurenonAzure SQL Data Warehouse non Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Questo argomento offre un riepilogo delle modalità di implementazione della compressione di pagina nel Motore di databaseDatabase Engine .This topic summarizes how the Motore di databaseDatabase Engine implements page compression. Tale riepilogo fornisce informazioni di base che consentono di pianificare lo spazio di archiviazione necessario per i dati.This summary provides basic information to help you plan the storage space that you need for your data.

La compressione di pagina è simile per tabelle e indici e relative partizioni.Page compression is similar for tables, table partitions, indexes, and index partitions. La descrizione seguente della compressione di pagina per una tabella si applica in modo analogo alla compressione di pagina per tutti i tipi di oggetto.The following description of page compression for a table applies equally to page compression for all object types. Negli esempi seguenti vengono compresse stringhe di caratteri, ma sia la compressione basata su prefisso che quella basata su dizionario applicano gli stessi principi agli altri tipi di dati.The following examples compress character strings, but both prefix and dictionary compression apply the same principles to other data types.

La compressione del livello foglia di tabelle e indici con compressione di pagina è costituita da tre operazioni eseguite nell'ordine seguente:Compressing the leaf level of tables and indexes with page compression consists of three operations in the following order:

  1. Compressione di rigaRow compression

  2. Compressione basata su prefissoPrefix compression

  3. Compressione basata su dizionarioDictionary compression

    Quando si utilizza la compressione di pagina, per le pagine di indici che non si trovano a livello foglia viene utilizzata solo la compressione di riga.When you use page compression, non–leaf-level pages of indexes are compressed by using only row compression. Per altre informazioni sulla compressione di riga, vedere Implementazione della compressione di riga.For more information about row compression, see Row Compression Implementation.

Compressione basata su prefissoPrefix Compression

Per ogni pagina da comprimere, la compressione basata su prefisso viene eseguita mediante i passaggi seguenti:For each page that is being compressed, prefix compression uses the following steps:

  1. Per ogni colonna, viene identificato un valore che può essere utilizzato per ridurre lo spazio di archiviazione per i valori della colonna.For each column, a value is identified that can be used to reduce the storage space for the values in each column.

  2. Viene creata una riga che rappresenta i valori del prefisso per ogni colonna. Tale riga viene archiviata nella struttura delle informazioni di compressione immediatamente seguente all'intestazione della pagina.A row that represents the prefix values for each column is created and stored in the compression information (CI) structure that immediately follows the page header.

  3. I valori del prefisso ripetuti nella colonna vengono sostituiti da un riferimento al prefisso corrispondente.The repeated prefix values in the column are replaced by a reference to the corresponding prefix. Se il valore in una riga non corrisponde esattamente al valore del prefisso selezionato, è possibile indicare ancora una corrispondenza parziale.If the value in a row does not exactly match the selected prefix value, a partial match can still be indicated.

    Nell'illustrazione seguente viene mostrata una pagina di esempio di una tabella prima della compressione basata su prefisso.The following illustration shows a sample page of a table before prefix compression.

    Pagina prima della compressione basata su prefissoPage before prefix compression

    Nell'illustrazione seguente viene mostrata la stessa pagina di esempio dopo la compressione basata su prefisso.The following illustration shows the same page after prefix compression. Il prefisso viene spostato nell'intestazione e i valori della colonna vengono impostati sui riferimenti al prefisso.The prefix is moved to the header, and the column values are changed to references to the prefix.

    Pagina dopo la compressione basata su prefissoPage after prefix compression

    Nella prima colonna della prima riga, il valore 4b indica che i primi quattro caratteri del prefisso (aaab) sono presenti per tale riga, così come il carattere b.In the first column of the first row, the value 4b indicates that the first four characters of the prefix (aaab) are present for that row, and also the character b. Il valore risultante è aaabb, ovvero il valore originale.This makes the resultant value aaabb, which is the original value.

Compressione basata su dizionarioDictionary Compression

Dopo che la compressione basata su prefisso è stata completata, viene applicata quella basata su dizionario.After prefix compression has been completed, dictionary compression is applied. In base a tale compressione, viene eseguita la ricerca di valori ripetuti in qualsiasi punto della pagina che successivamente vengono archiviati nell'area relativa alla struttura delle informazioni di compressione.Dictionary compression searches for repeated values anywhere on the page, and stores them in the CI area. A differenza di quella basata su prefisso, la compressione basata su dizionario non è limitata a una colonnaUnlike prefix compression, dictionary compression is not restricted to one column. e può sostituire valori ripetuti presenti in qualsiasi punto di una pagina.Dictionary compression can replace repeated values that occur anywhere on a page. Nell'illustrazione seguente viene mostrata la stessa pagina di esempio dopo la compressione basata su dizionario.The following illustration shows the same page after dictionary compression.

Pagina dopo la compressione basata su dizionarioPage after dictionary compression

Notare che al valore 4b viene fatto riferimento da colonne diverse della pagina.Note that the value 4b has been referenced from different columns of the page.

Esecuzione della compressione di paginaWhen Page Compression Occurs

Quando si crea una nuova tabella con compressione di pagina, non viene eseguita alcuna compressione.When a new table is created that has page compression, no compression occurs. I metadati per la tabella indicano tuttavia la compressione di pagina da utilizzare.However, the metadata for the table indicates that page compression should be used. Man mano che i dati vengono aggiunti alla prima pagina di dati, viene applicata la compressione di riga.As data is added to the first data page, data is row-compressed. Poiché la pagina non è completa, la compressione di pagina non consente di ottenere alcun beneficio.Because the page is not full, no benefit is gained from page compression. Quando la pagina è completa, la successiva riga da aggiungere avvia l'operazione di compressione di pagina.When the page is full, the next row to be added initiates the page compression operation. La pagina intera viene rivista, ogni colonna viene valutata per la compressione basata su prefisso, quindi tutte le colonne vengono valutate per eseguire la compressione basata su dizionario.The whole page is reviewed; each column is evaluated for prefix compression, and then all columns are evaluated for dictionary compression. Se la compressione di pagina ha creato spazio sufficiente per un'ulteriore riga, la riga viene aggiunta e ai dati viene applicata sia la compressione di riga che quella di pagina.If page compression has created enough room on the page for an additional row, the row is added, and the data is both row- and page-compressed. Se lo spazio guadagnato in seguito alla compressione di pagina senza lo spazio necessario per la struttura delle informazioni di compressione non è significativo, la compressione di pagina non viene utilizzata.If the space gained by page compression minus the space that is required for the CI structure is not significant, page compression is not used for that page. Le righe successive vengono inserite nella nuova pagina. Se lo spazio non è sufficiente, alla tabella viene aggiunta una nuova pagina.Future rows either fit onto the new page or, if they do not fit, a new page is added to the table. Analogamente alla prima pagina, alla nuova pagina non viene inizialmente applicata la compressione di pagina.Similar to the first page, the new page is not at first page-compressed.

Quando una tabella esistente che contiene dati viene convertita in base alla compressione di pagina, ogni pagina viene ricompilata e valutata.When an existing table that contains data is converted to page compression, each page is rebuilt and evaluated. La ricompilazione di tutte le pagine provoca la ricompilazione della tabella, dell'indice o della partizione.Rebuilding all the pages causes the rebuilding of the table, index, or partition.

Vedere ancheSee Also

Compressione dei dati Data Compression
Implementazione della compressione di rigaRow Compression Implementation