Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
Questo articolo offre un riepilogo delle modalità di implementazione della compressione di pagina nel motore di database. Tale riepilogo fornisce informazioni di base che consentono di pianificare lo spazio di archiviazione necessario per i dati.
La compressione di pagina è simile per tabelle e indici e relative partizioni. 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. 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.
La compressione del livello foglia di tabelle e indici con compressione di pagina è costituita da tre operazioni eseguite nell'ordine seguente:
- Compressione di riga
- Compressione basata su prefisso
- Compressione basata su dizionario
Quando si usa la compressione di pagina, per le pagine di indici che non si trovano a livello foglia viene usata solo la compressione di riga. Per altre informazioni sulla compressione di riga, vedere Implementazione della compressione di riga.
Compressione del prefisso
Per ogni pagina da comprimere, la compressione basata su prefisso viene eseguita mediante i passaggi seguenti:
Per ogni colonna, viene identificato un valore che può essere utilizzato per ridurre lo spazio di archiviazione per i valori della colonna.
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.
I valori del prefisso ripetuti nella colonna vengono sostituiti da un riferimento al prefisso corrispondente. Se il valore in una riga non corrisponde esattamente al valore del prefisso selezionato, è possibile indicare ancora una corrispondenza parziale.
Nell'illustrazione seguente viene mostrata una pagina di esempio di una tabella prima della compressione basata su prefisso.
Nell'illustrazione seguente viene mostrata la stessa pagina dopo la compressione per prefisso. Il prefisso viene spostato nell'intestazione e i valori della colonna vengono modificati in riferimenti al prefisso.
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
. Il valore risultante è aaabb
, ovvero il valore originale.
Compressione basata su dizionario
Dopo che la compressione basata su prefisso è stata completata, viene applicata quella basata su dizionario. La compressione con dizionario cerca valori ripetuti in qualsiasi punto della pagina e li archivia nell'area CI. A differenza di quella basata su prefisso, la compressione basata su dizionario non è limitata a una colonna. La compressione del dizionario può sostituire i valori ripetuti presenti in qualsiasi punto di una pagina. Nell'illustrazione seguente viene mostrata la stessa pagina dopo la compressione del dizionario.
Notare che al valore 4b
viene fatto riferimento da colonne diverse della pagina.
Quando si verifica la compressione della pagina
Quando si crea una nuova tabella con compressione di pagina, non viene eseguita alcuna compressione. I metadati per la tabella indicano tuttavia la compressione di pagina da utilizzare. Man mano che i dati vengono aggiunti alla prima pagina di dati, viene applicata la compressione di riga. Poiché la pagina non è completa, la compressione di pagina non consente di ottenere alcun beneficio. Quando la pagina è completa, la successiva riga da aggiungere avvia l'operazione di compressione di pagina. 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. 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. Se lo spazio guadagnato dalla compressione della pagina meno lo spazio richiesto per la struttura CI non è significativo, la compressione della pagina non viene utilizzata per quella pagina. Le righe successive vengono inserite nella nuova pagina. Se lo spazio non è sufficiente, alla tabella viene aggiunta una nuova pagina. Analogamente alla prima pagina, alla nuova pagina non viene inizialmente applicata la compressione di pagina.
Quando una tabella esistente che contiene dati viene convertita in base alla compressione di pagina, ogni pagina viene ricompilata e valutata. La ricompilazione di tutte le pagine provoca la ricompilazione della tabella, dell'indice o della partizione.