Stima delle dimensioni di un indice clusterEstimate the Size of a Clustered Index

Per stimare la quantità di spazio necessaria per l'archiviazione dati in un indice cluster, è possibile utilizzare la procedura seguente:You can use the following steps to estimate the amount of space that is required to store data in a clustered index:

  1. Calcolare lo spazio utilizzato per archiviare dati nel livello foglia dell'indice cluster.Calculate the space used to store data in the leaf level of the clustered index.

  2. Calcolare lo spazio utilizzato per archiviare le informazioni sugli indici per l'indice cluster.Calculate the space used to store index information for the clustered index.

  3. Sommare i valori calcolati.Total the calculated values.

Passaggio 1.Step 1. Calcolare lo spazio utilizzato per l'archiviazione di dati nel livello fogliaCalculate the Space Used to Store Data in the Leaf Level

  1. Specificare il numero di righe che verranno incluse nella tabella:Specify the number of rows that will be present in the table:

    Num_Rows = numero di righe della tabellaNum_Rows = number of rows in the table

  2. Specificare il numero di colonne di lunghezza fissa e e variabile e calcolare lo spazio necessario per la loro archiviazione:Specify the number of fixed-length and variable-length columns and calculate the space that is required for their storage:

    Calcolare lo spazio occupato da ognuno di questi gruppi di colonne all'interno della riga di dati.Calculate the space that each of these groups of columns occupies within the data row. Le dimensioni di una colonna dipendono dal tipo di dati e dalla lunghezza specificata.The size of a column depends on the data type and length specification.

    Num_Cols = numero totale di colonne (a lunghezza fissa e a lunghezza variabile)Num_Cols = total number of columns (fixed-length and variable-length)

    Fixed_Data_Size = dimensioni totali in byte di tutte le colonne a lunghezza fissaFixed_Data_Size = total byte size of all fixed-length columns

    Num_Variable_Cols = numero di colonne a lunghezza variabileNum_Variable_Cols = number of variable-length columns

    Max_Var_Size = dimensioni massime in byte di tutte le colonne a lunghezza variabileMax_Var_Size = maximum byte size of all variable-length columns

  3. Se l'indice cluster è non univoco, considerare la colonna uniqueifier :If the clustered index is nonunique, account for the uniqueifier column:

    La colonna uniqueifier è una colonna a lunghezza variabile che ammette valori Null.The uniqueifier is a nullable, variable-length column. Sarà una colonna non Null da 4 byte nelle righe che includono valori chiave non univoci.It will be nonnull and 4 bytes in size in rows that have nonunique key values. Questo valore fa parte della chiave di indice ed è necessario per garantire che ogni riga includa un valore di chiave univoco.This value is part of the index key and is required to make sure that every row has a unique key value.

    Num_Cols = Num_Cols + 1Num_Cols = Num_Cols + 1

    Num_Variable_Cols = Num_Variable_Cols + 1Num_Variable_Cols = Num_Variable_Cols + 1

    Max_Var_Size = Max_Var_Size + 4Max_Var_Size = Max_Var_Size + 4

    In queste modifiche si presuppone che tutti i valori siano non univoci.These modifications assume that all values will be nonunique.

  4. Parte della riga, nota come mappa di bit null, è riservata alla gestione del supporto dei valori Null in una colonna.Part of the row, known as the null bitmap, is reserved to manage column nullability. Calcolarne le dimensioni:Calculate its size:

    Null_Bitmap = 2 + ((Num_Cols + 7) / 8)Null_Bitmap = 2 + ((Num_Cols + 7) / 8)

    Utilizzare solo la parte intera del risultato dell'espressione indicata in precedenza, eliminando eventuali residui.Only the integer part of the previous expression should be used; discard any remainder.

  5. Calcolare le dimensioni dei dati di lunghezza variabile:Calculate the variable-length data size:

    Se la tabella include colonne di lunghezza variabile, determinare la quantità di spazio utilizzata per l'archiviazione delle colonne nella riga:If there are variable-length columns in the table, determine how much space is used to store the columns within the row:

    Variable_Data_Size = 2 + (Num_Variable_Cols x 2) + Max_Var_SizeVariable_Data_Size = 2 + (Num_Variable_Cols x 2) + Max_Var_Size

    I byte aggiunti a Max_Var_Size servono a tenere traccia di ogni colonna variabile.The bytes added to Max_Var_Size are for tracking each variable column. Questa formula si basa sul presupposto che tutte le colonne a lunghezza variabile siano piene al 100%.This formula assumes that all variable-length columns are 100 percent full. Se si prevede una percentuale inferiore di utilizzo dello spazio di archiviazione delle colonne a lunghezza variabile, è possibile modificare il valore di Max_Var_Size in base a tale percentuale per ottenere una stima più accurata delle dimensioni complessive della tabella.If you anticipate that a smaller percentage of the variable-length column storage space will be used, you can adjust the Max_Var_Size value by that percentage to yield a more accurate estimate of the overall table size.

    Nota

    È possibile combinare colonne varchar, nvarchar, varbinaryo sql_variant che fanno eccedere gli 8.060 byte per la larghezza totale definita della tabella.You can combine varchar, nvarchar, varbinary, or sql_variant columns that cause the total defined table width to exceed 8,060 bytes. La lunghezza di ogni colonna deve essere compresa nel limite di 8.000 byte per una colonna varchar, varbinaryo sql_variant e di 4.000 byte per le colonne nvarchar .The length of each one of these columns must still fall within the limit of 8,000 bytes for a varchar, varbinary, or sql_variant column, and 4,000 bytes for nvarchar columns. Le larghezze combinate di tali colonne possono tuttavia superare il limite di 8.060 byte in una tabella.However, their combined widths may exceed the 8,060 byte limit in a table.

    Se non sono disponibili colonne di lunghezza variabile, impostare Variable_Data_Size su 0.If there are no variable-length columns, set Variable_Data_Size to 0.

  6. Calcolare le dimensioni totali della riga:Calculate the total row size:

    Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4

    Il valore 4 rappresenta l'overhead dell'intestazione di riga di una riga di dati.The value 4 is the row header overhead of a data row.

  7. Calcolare il numero di righe per pagina (8096 byte liberi per pagina):Calculate the number of rows per page (8096 free bytes per page):

    Rows_Per_Page = 8096 / (Row_Size + 2)Rows_Per_Page = 8096 / (Row_Size + 2)

    Poiché le righe non si estendono su più pagine, il numero di righe per pagina deve essere arrotondato alla riga completa più vicina.Because rows do not span pages, the number of rows per page should be rounded down to the nearest whole row. Il valore 2 nella formula è per la voce di riga nella matrice di slot della pagina.The value 2 in the formula is for the row's entry in the slot array of the page.

  8. Calcolare il numero di righe libere riservate per pagina, in base al fattore di riempimento specificato:Calculate the number of reserved free rows per page, based on the fill factor specified:

    Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Row_Size + 2)Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Row_Size + 2)

    Il fattore di riempimento utilizzato nel calcolo è un valore intero, non una percentuale.The fill factor used in the calculation is an integer value instead of a percentage. Poiché le righe non si estendono su più pagine, il numero di righe per pagina deve essere arrotondato alla riga completa più vicina.Because rows do not span pages, the number of rows per page should be rounded down to the nearest whole row. Aumentando il fattore di riempimento, in ciascuna pagina verrà archiviata una quantità maggiore di dati e il numero di pagine diminuirà.As the fill factor grows, more data will be stored on each page and there will be fewer pages. Il valore 2 nella formula è per la voce di riga nella matrice di slot della pagina.The value 2 in the formula is for the row's entry in the slot array of the page.

  9. Calcolare il numero di pagine necessario per archiviare tutte le righe:Calculate the number of pages required to store all the rows:

    Num_Leaf_Pages = Num_Rows / (Rows_Per_Page - Free_Rows_Per_Page)Num_Leaf_Pages = Num_Rows / (Rows_Per_Page - Free_Rows_Per_Page)

    Il numero di pagine stimato deve essere arrotondato alla pagina intera più vicina.The number of pages estimated should be rounded up to the nearest whole page.

  10. Calcolare la quantità di spazio necessaria per l'archiviazione dei dati nel livello foglia (8192 byte totali per pagina):Calculate the amount of space that is required to store the data in the leaf level (8192 total bytes per page):

    Leaf_space_used = 8192 x Num_Leaf_PagesLeaf_space_used = 8192 x Num_Leaf_Pages

Passaggio 2.Step 2. Calcolare lo spazio utilizzato per l'archiviazione di informazioni sull'indiceCalculate the Space Used to Store Index Information

Per stimare la quantità di spazio necessario per archiviare i livelli superiori dell'indice, è possibile utilizzare la seguente procedura:You can use the following steps to estimate the amount of space that is required to store the upper levels of the index:

  1. Specificare il numero di colonne a lunghezza fissa e a lunghezza variabile incluse nella chiave dell'indice e calcolare lo spazio necessario per archiviarle:Specify the number of fixed-length and variable-length columns in the index key and calculate the space that is required for their storage:

    Le colonne chiave di un indice possono includere colonne a lunghezza fissa e a lunghezza variabile.The key columns of an index can include fixed-length and variable-length columns. Per stimare le dimensioni delle righe di indice di livello interno, calcolare lo spazio occupato da ognuno di questi gruppi di colonne all'interno della riga di indice.To estimate the interior level index row size, calculate the space that each of these groups of columns occupies within the index row. Le dimensioni di una colonna dipendono dal tipo di dati e dalla lunghezza specificata.The size of a column depends on the data type and length specification.

    Num_Key_Cols = numero totale di colonne chiave (a lunghezza fissa e a lunghezza variabile)Num_Key_Cols = total number of key columns (fixed-length and variable-length)

    Fixed_Key_Size = dimensioni totali in byte di tutte le colonne chiave a lunghezza fissaFixed_Key_Size = total byte size of all fixed-length key columns

    Num_Variable_Key_Cols = numero di colonne chiave a lunghezza variabileNum_Variable_Key_Cols = number of variable-length key columns

    Max_Var_Key_Size = dimensioni massime in byte di tutte le colonne chiave a lunghezza variabileMax_Var_Key_Size = maximum byte size of all variable-length key columns

  2. Considerare le eventuali colonne uniqueifier necessarie se l'indice è non univoco:Account for any uniqueifier needed if the index is nonunique:

    La colonna uniqueifier è una colonna a lunghezza variabile che ammette valori Null.The uniqueifier is a nullable, variable-length column. Sarà una colonna non Null da 4 byte nelle righe che includono valori chiave di indice non univoci.It will be nonnull and 4 bytes in size in rows that have nonunique index key values. Questo valore fa parte della chiave di indice ed è necessario per garantire che ogni riga includa un valore di chiave univoco.This value is part of the index key and is required to make sure that every row has a unique key value.

    Num_Key_Cols = Num_Key_Cols + 1Num_Key_Cols = Num_Key_Cols + 1

    Num_Variable_Key_Cols = Num_Variable_Key_Cols + 1Num_Variable_Key_Cols = Num_Variable_Key_Cols + 1

    Max_Var_Key_Size = Max_Var_Key_Size + 4Max_Var_Key_Size = Max_Var_Key_Size + 4

    In queste modifiche si presuppone che tutti i valori siano non univoci.These modifications assume that all values will be nonunique.

  3. Calcolare le dimensioni della mappa di bit Null:Calculate the null bitmap size:

    Se nella chiave di indice sono incluse colonne che ammettono valori Null, una parte della riga di indice viene riservata per la mappa di bit Null.If there are nullable columns in the index key, part of the index row is reserved for the null bitmap. Calcolarne le dimensioni:Calculate its size:

    Index_Null_Bitmap = 2 + ((numero di colonne nella riga di indice + 7) / 8)Index_Null_Bitmap = 2 + ((number of columns in the index row + 7) / 8)

    Deve essere utilizzata solo la parte Integer dell'espressione precedente.Only the integer part of the previous expression should be used. Eliminare le parti restanti.Discard any remainder.

    Se invece non sono disponibili colonne chiave che ammettono i valori Null, impostare Index_Null_Bitmap su 0.If there are no nullable key columns, set Index_Null_Bitmap to 0.

  4. Calcolare le dimensioni dei dati di lunghezza variabile:Calculate the variable-length data size:

    Se l'indice include colonne a lunghezza variabile, determinare la quantità di spazio utilizzata per l'archiviazione delle colonne nella riga di indice:If there are variable-length columns in the index, determine how much space is used to store the columns within the index row:

    Variable_Key_Size = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_SizeVariable_Key_Size = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size

    I byte aggiunti a Max_Var_Key_Size servono a tenere traccia di ogni colonna a lunghezza variabile.The bytes added to Max_Var_Key_Size are for tracking each variable-length column. Questa formula si basa sul presupposto che tutte le colonne a lunghezza variabile siano piene al 100%.This formula assumes that all variable-length columns are 100 percent full. Se si prevede una percentuale inferiore di utilizzo dello spazio di archiviazione delle colonne a lunghezza variabile, è possibile modificare il valore di Max_Var_Key_Size in base a tale percentuale per ottenere una stima più accurata delle dimensioni complessive della tabella.If you anticipate that a smaller percentage of the variable-length column storage space will be used, you can adjust the Max_Var_Key_Size value by that percentage to yield a more accurate estimate of the overall table size.

    Se non sono disponibili colonne a lunghezza variabile, impostare Variable_Key_Size su 0.If there are no variable-length columns, set Variable_Key_Size to 0.

  5. Calcolare le dimensioni della riga di indice:Calculate the index row size:

    Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 (per l'overhead dell'intestazione di una riga di indice) + 6 (per il puntatore ID della pagina figlio)Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 (for row header overhead of an index row) + 6 (for the child page ID pointer)

  6. Calcolare il numero di righe di indice per pagina (8096 byte liberi per pagina):Calculate the number of index rows per page (8096 free bytes per page):

    Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)

    Poiché le righe di indice non si estendono su più pagine, il numero di righe di indice per pagina deve essere arrotondato alla riga completa più vicina.Because index rows do not span pages, the number of index rows per page should be rounded down to the nearest whole row. Il numero 2 nella formula si riferisce alla voce della riga nella matrice di slot della pagina.The 2 in the formula is for the row's entry in the page's slot array.

  7. Calcolare il numero di livelli nell'indice:Calculate the number of levels in the index:

    Non-leaf_Levels = 1 + log (Index_Rows_Per_Page) (Num_Leaf_Pages / Index_Rows_Per_Page)Non-leaf_Levels = 1 + log (Index_Rows_Per_Page) (Num_Leaf_Pages / Index_Rows_Per_Page)

    Arrotondare questo valore per eccesso al numero intero più vicino.Round this value up to the nearest whole number. Nel valore non è incluso il livello foglia dell'indice cluster.This value does not include the leaf level of the clustered index.

  8. Calcolare il numero di pagine non foglia dell'indice:Calculate the number of non-leaf pages in the index:

    Num_Index_Pages = ∑Level (Num_Leaf_Pages / (Index_Rows_Per_Page^Level))Num_Index_Pages = ∑Level (Num_Leaf_Pages / (Index_Rows_Per_Page^Level))

    dove 1 <= Level <= Non-leaf_Levelswhere 1 <= Level <= Non-leaf_Levels

    Arrotondare ogni addendo al numero intero più vicino.Round each summand up to the nearest whole number. Per un esempio semplice, considerare un indice in cui Num_Leaf_Pages = 1000 e Index_Rows_Per_Page = 25.As a simple example, consider an index where Num_Leaf_Pages = 1000 and Index_Rows_Per_Page = 25. Nel primo livello dell'indice sopra il livello foglia vengono archiviate 1000 righe di indice, ovvero una riga di indice per pagina foglia, ed è possibile inserire 25 righe di indice per pagina.The first index level above the leaf level stores 1000 index rows, which is one index row per leaf page, and 25 index rows can fit per page. Per archiviare le 1000 righe di indice, sono quindi necessarie 40 pagine.This means that 40 pages are required to store those 1000 index rows. Nel livello successivo dell'indice devono invece essere archiviate 40 righe,The next level of the index has to store 40 rows. pertanto sono necessarie 2 pagine.This means it requires 2 pages. Nel livello finale dell'indice devono essere archiviate 2 righe,The final level of the index has to store 2 rows. pertanto è necessaria una sola pagina.This means it requires 1 page. Si ottengono quindi 43 pagine di indice non foglia.This gives 43 non-leaf index pages. Se nella formula precedente si utilizzano questi numeri, il risultato sarà il seguente:When these numbers are used in the previous formulas, the outcome is as follows:

    Non-leaf_Levels = 1 + log(25) (1000 / 25) = 3Non-leaf_Levels = 1 + log(25) (1000 / 25) = 3

    Num_Index_Pages = 1000/(25^3)+ 1000/(25^2) + 1000/(25^1) = 1 + 2 + 40 = 43, ovvero il numero di pagine descritto nell'esempio.Num_Index_Pages = 1000/(25^3)+ 1000/(25^2) + 1000/(25^1) = 1 + 2 + 40 = 43, which is the number of pages described in the example.

  9. Calcolare le dimensioni dell'indice (8192 byte totali per pagina):Calculate the size of the index (8192 total bytes per page):

    Index_Space_Used = 8192 x Num_Index_PagesIndex_Space_Used = 8192 x Num_Index_Pages

Passaggio 3.Step 3. Sommare i valori calcolatiTotal the Calculated Values

Sommare i valori ottenuti nei due passaggi precedenti:Total the values obtained from the previous two steps:

Dimensioni indice cluster (byte) = Leaf_Space_Used + Index_Space_usedClustered index size (bytes) = Leaf_Space_Used + Index_Space_used

Il calcolo non prende in considerazione i fattori seguenti:This calculation does not consider the following:

  • PartizionamentoPartitioning

    L'overhead dello spazio derivante dal partizionamento è minimo, ma difficile da calcolare.The space overhead from partitioning is minimal, but complex to calculate. Non è fondamentale includerlo.It is not important to include.

  • Pagine di allocazioneAllocation pages

    Esiste almeno una pagina IAM utilizzata per tenere traccia delle pagine allocate su un heap, ma l'overhead dello spazio è minimo e non è presente alcun algoritmo per calcolare in modo deterministico l'esatto numero di pagine IAM che verranno utilizzate.There is at least one IAM page used to track the pages allocated to a heap, but the space overhead is minimal and there is no algorithm to deterministically calculate exactly how many IAM pages will be used.

  • Valori LOBLarge object (LOB) values

    L'algoritmo per determinare con esattezza la quantità di spazio utilizzata per archiviare i tipi di dati LOB varchar(max), varbinary(max), nvarchar(max), text, ntext, xmle image è complesso.The algorithm to determine exactly how much space will be used to store the LOB data types varchar(max), varbinary(max), nvarchar(max), text, ntext, xml, and image values is complex. È sufficiente aggiungere le dimensioni medie dei valori LOB previste, moltiplicare per Num_Rowse quindi aggiungere il valore ottenuto alle dimensioni totali dell'indice cluster.It is sufficient to just add the average size of the LOB values that are expected, multiply by Num_Rows, and add that to the total clustered index size.

  • CompressioneCompression

    Non è possibile pre-calcolare la dimensione di un indice compresso.You cannot pre-calculate the size of a compressed index.

  • Colonne di tipo sparseSparse columns

    Per informazioni sui requisiti di spazio delle colonne di tipo sparse, vedere Utilizzo di colonne di tipo sparse.For information about the space requirements of sparse columns, see Use Sparse Columns.

Vedere ancheSee Also

Descrizione di indici cluster e non cluster. Clustered and Nonclustered Indexes Described
Stima delle dimensioni di una tabella Estimate the Size of a Table
Creare indici cluster Create Clustered Indexes
Creare indici non cluster Create Nonclustered Indexes
Stima delle dimensioni di un indice non cluster Estimate the Size of a Nonclustered Index
Stima delle dimensioni di un heap Estimate the Size of a Heap
Stima delle dimensioni di un databaseEstimate the Size of a Database