Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Instancia
administrada de Azure SQLBase de datos SQL en Microsoft Fabric
Siga estos pasos para estimar el espacio necesario para almacenar un índice no clúster:
Calcular las variables que deben usarse en los pasos 2 y 3.
Calcular el espacio utilizado para almacenar información del índice en el nivel hoja del índice no clúster.
Calcular el espacio utilizado para almacenar información del índice en los niveles no hoja del índice no clúster.
Sumar los valores calculados.
Paso 1. Cálculo de variables para su uso en los pasos 2 y 3
Los siguientes pasos pueden utilizarse para calcular las variables que se utilizan para estimar el espacio necesario para almacenar los niveles superiores del índice:
Especifique el número de filas que habrá en la tabla:
- Num_Rows = número de filas de la tabla
Especifique el número de columnas de longitud fija y variable de la clave de índice, y calcule el espacio necesario para su almacenamiento:
Las columnas de clave de un índice pueden incluir columnas de longitud fija y de longitud variable. Para estimar el tamaño de las filas de índice de nivel interior, calcule el espacio que ocupa cada uno de estos grupos de columnas en la fila de índice. El tamaño de una columna depende del tipo y de la longitud especificados para los datos.
- Num_Key_Cols = número total de columnas de clave (de longitud fija y variable)
- Fixed_Key_Size = tamaño total en bytes de todas las columnas de clave de longitud fija
- Num_Variable_Key_Cols = número de columnas de clave de longitud variable
- Max_Var_Key_Size = tamaño máximo en bytes de todas las columnas de clave de longitud variable
Tenga en cuenta el localizador de fila de datos necesario si el índice no es único:
Si el índice no clúster no es único, el localizador de fila de datos se combina con la clave de índice no clúster para generar un valor de clave único para cada fila.
Si el índice no clúster se encuentra sobre un montón, el localizador de fila de datos es el RID del montón. Tiene un tamaño de 8 bytes.
- Num_Key_Cols = Num_Key_Cols + 1
- Num_Variable_Key_Cols = Num_Variable_Key_Cols + 1
- Max_Var_Key_Size = Max_Var_Key_Size + 8
Si el índice no clúster se encuentra sobre un índice clúster, el localizador de fila de datos es la clave de agrupación en clústeres. Las columnas que deben combinarse con la clave de índice no agrupada son esas columnas de la clave de agrupación en clústeres que aún no están presentes en el conjunto de columnas de clave de índice no agrupadas.
Num_Key_Cols = Num_Key_Cols + número de columnas de clave de agrupación en clústeres no presentes en el conjunto de columnas de clave de índice no agrupado (+ 1 si el índice agrupado no es único)
Fixed_Key_Size = Fixed_Key_Size + tamaño total en bytes de las columnas de clave de agrupación en clústeres de longitud fija que no están presentes en el conjunto de columnas de clave de índice no agrupado
Num_Variable_Key_Cols = Num_Variable_Key_Cols + número de columnas de clave de agrupación en clústeres de longitud variable no presentes en el conjunto de columnas de clave de índice no agrupado (+ 1 si el índice agrupado no es único)
Max_Var_Key_Size = Max_Var_Key_Size + tamaño máximo en bytes de las columnas de clave de agrupación en clústeres de longitud variable no presentes en el conjunto de columnas de clave de índice no agrupado (+ 4 si el índice agrupado no es único)
Parte de la fila, conocida como mapa de bits NULL, podría reservarse para administrar la nulabilidad de columnas. Calcule el tamaño:
Si existen columnas que aceptan valores NULL en la clave del índice, incluidas las columnas de clave de agrupación en clústeres necesarias que se describen en el paso 1.3, se reserva parte de la fila de índice para el mapa de bits NULL.
- Index_Null_Bitmap = 2 + ((número de columnas de la fila de índice + 7) / 8)
Solamente debe utilizarse la parte entera de la expresión anterior. Descarte el resto.
Si no hay columnas de clave que aceptan valores NULL, establezca Index_Null_Bitmap en 0.
Calcule el tamaño de los datos de longitud variable:
Si hay columnas de longitud variable en la clave de índice, incluidas las columnas de clave de índice clúster necesarias, determine cuánto espacio se utiliza para almacenar las columnas de la fila de índice:
- Variable_Key_Size = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size
Los bytes agregados a Max_Var_Key_Size son para realizar el seguimiento de cada columna variable. En esta fórmula se supone que todas las columnas de longitud variable están llenas al 100 %. Si prevé que se va a usar un porcentaje inferior del espacio de almacenamiento de columnas de longitud variable, puede ajustar el valor de Max_Var_Key_Size en función de ese porcentaje para obtener una estimación más precisa del tamaño global de la tabla.
Si no hay columnas de longitud variable, establezca Variable_Key_Size en 0.
Calcule el tamaño de la fila del índice:
- Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap+ 1 (para la sobrecarga de encabezado de una fila de índice) + 6 (para el puntero de identificador de página secundaria)
Calcule el número de filas de índice por página (8096 bytes libres por página):
- Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)
Dado que las filas de índice no abarcan páginas, el número de filas de índice por página debe redondearse hacia abajo hasta la fila completa más cercana. El valor 2 de la fórmula representa la entrada de la fila en la matriz de zonas de la página.
Paso 2. Calcular el espacio usado para almacenar información de índice en el nivel hoja
Para estimar el espacio necesario para almacenar el nivel hoja del índice, puede utilizar los siguientes pasos. Necesitarás los valores conservados del paso 1 para completar este paso.
Especifique el número de columnas de longitud fija y variable en el nivel hoja y calcule el espacio necesario para su almacenamiento:
Un índice no clúster se puede ampliar incluyendo columnas que no son de clave además de las columnas de clave de índice. Estas columnas adicionales solamente se almacenan en el nivel hoja del índice no clúster. Para obtener más información, consulte Creación de índices con columnas incluidas.
Note
Puede combinar las columnas varchar, nvarchar, varbinaryo sql_variant que hacen que el ancho total definido para la tabla sea superior a 8060 bytes. La longitud de cada una de estas columnas debe ajustarse al límite de 8000 bytes en columnas varchar, varbinaryo sql_variant y de 4000 bytes en columnas nvarchar . Sin embargo, sus anchos combinados podrían superar el límite de 8060 bytes en una tabla. Esto también se aplica a filas de hoja de índice no clúster con columnas incluidas.
Si el índice no agrupado no tiene ninguna columna incluida, use los valores del paso 1, incluidas las modificaciones determinadas en el paso 1.3:
- Num_Leaf_Cols = Num_Key_Cols
- Fixed_Leaf_Size = Fixed_Key_Size
- Num_Variable_Leaf_Cols = Num_Variable_Key_Cols
- Max_Var_Leaf_Size = Max_Var_Key_Size
Si el índice no clúster no incluye columnas, agregue los valores apropiados a los valores del Paso 1, incluidas las modificaciones del Paso 1.3. El tamaño de una columna depende del tipo y de la longitud especificados para los datos. Para obtener más información, vea Tipos de datos.
- Num_Leaf_Cols = Num_Key_Cols + número de columnas incluidas
- Fixed_Leaf_Size = Fixed_Key_Size + tamaño total de bytes de las columnas de longitud fija incluidas
- Num_Variable_Leaf_Cols = Num_Variable_Key_Cols + número de columnas de longitud variable incluidas
- Max_Var_Leaf_Size = Max_Var_Key_Size + tamaño máximo de bytes de todas las columnas de longitud variable incluidas
Tenga en cuenta el localizador de fila de datos:
Si el índice no clúster no es único, la sobrecarga para el localizador de filas de datos ya se ha considerado en el paso 1.3 y no se requieren más modificaciones. Vaya al paso siguiente.
Si el índice no clúster es único, el localizador de fila de datos debe tenerse en cuenta en todas las filas del nivel hoja.
Si el índice no clúster se encuentra sobre un montón, el localizador de fila de datos es el RID del montón (tamaño 8 bytes).
- Num_Leaf_Cols = Num_Leaf_Cols + 1
- Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + 1
- Max_Var_Leaf_Size = Max_Var_Leaf_Size + 8
Si el índice no clúster se encuentra sobre un índice clúster, el localizador de fila de datos es la clave de agrupación en clústeres. Las columnas que deben combinarse con la clave de índice no agrupada son esas columnas de la clave de agrupación en clústeres que aún no están presentes en el conjunto de columnas de clave de índice no agrupadas.
Num_Leaf_Cols = Num_Leaf_Cols + número de columnas de clave de agrupación en clústeres no presentes en el conjunto de columnas de clave de índice no agrupado (+ 1 si el índice agrupado no es único)
Fixed_Leaf_Size = Fixed_Leaf_Size + número de columnas de clave de agrupación en clústeres de longitud fija que no están presentes en el conjunto de columnas de clave de índice no agrupado
Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + número de columnas de clave de agrupación en clústeres de longitud variable no presentes en el conjunto de columnas de clave de índice no agrupado (+ 1 si el índice agrupado no es único)
Max_Var_Leaf_Size = Max_Var_Leaf_Size + tamaño en bytes de las columnas de clave de agrupación en clústeres de longitud variable que no están presentes en el conjunto de columnas de clave de índice no agrupado (+ 4 si el índice agrupado no es único)
Calcule el tamaño del mapa de bits de valor NULL:
- Leaf_Null_Bitmap = 2 + ((Num_Leaf_Cols + 7) / 8)
Solamente debe utilizarse la parte entera de la expresión anterior. Descarte el resto.
Calcule el tamaño de los datos de longitud variable:
Si hay columnas de longitud variable (columnas de clave o incluidas), incluidas las columnas de clave de agrupación en clústeres necesarias según se describe en el Paso 2.2, determine cuánto espacio se utiliza para almacenar las columnas de la fila de índice:
- Variable_Leaf_Size = 2 + (Num_Variable_Leaf_Cols x 2) + Max_Var_Leaf_Size
Los bytes agregados a Max_Var_Key_Size son para realizar el seguimiento de cada columna variable. En esta fórmula se supone que todas las columnas de longitud variable están llenas al 100 %. Si prevé que va a usarse un porcentaje inferior del espacio de almacenamiento de las columnas de longitud variable, puede ajustar el valor de Max_Var_Leaf_Size en función de ese porcentaje para obtener una estimación más precisa del tamaño global de la tabla.
Si no hay columnas de longitud variable (columnas de clave o incluidas), establezca Variable_Leaf_Size en 0.
Calcule el tamaño de la fila del índice:
- Leaf_Row_Size = Fixed_Leaf_Size + Variable_Leaf_Size + Leaf_Null_Bitmap + 1 (para la sobrecarga de encabezado de una fila de índice)
Calcule el número de filas de índice por página (8096 bytes libres por página):
- Leaf_Rows_Per_Page = 8096 / (Leaf_Row_Size + 2)
Dado que las filas de índice no abarcan páginas, el número de filas de índice por página debe redondearse hacia abajo hasta la fila completa más cercana. El valor 2 de la fórmula representa la entrada de la fila en la matriz de zonas de la página.
Calcule el número de filas libres reservadas por página, basándose en el valor de factor de relleno especificado:
- Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Leaf_Row_Size + 2)
El factor de relleno que se utiliza en el cálculo es un valor entero y no un porcentaje. Dado que las filas no abarcan páginas, el número de filas por página debe redondearse hacia abajo hasta la fila completa más cercana. A medida que crece el factor de relleno, se almacenan más datos en cada página y hay menos páginas. El valor 2 de la fórmula representa la entrada de la fila en la matriz de zonas de la página.
Calcule el número de páginas necesarias para almacenar todas las filas:
- = Num_Leaf_PagesNum_Rows / (Leaf_Rows_Per_Page - Free_Rows_Per_Page)
El número de páginas estimado debe redondearse hacia arriba a la página completa más cercana.
Calcule el tamaño del índice (8192 bytes totales por página):
- Leaf_Space_Used = 8192 x Num_Leaf_Pages
Paso 3. Calcular el espacio usado para almacenar información de índice en los niveles que no son hoja
Siga estos pasos para estimar el espacio necesario para almacenar los niveles intermedio y raíz del índice. Necesitas los valores obtenidos en los pasos 2 y 3 para completar este paso.
Calcule el número de niveles no hoja del índice:
- Niveles no hoja = 1 + log(Index_Rows_Per_Page) ( / Index_Rows_Per_Page)
Redondee este valor al número entero más próximo. Este valor no incluye el nivel hoja del índice no agrupado.
Calcule el número de páginas no hoja del índice:
- Num_Index_Pages = ∑Level (Num_Leaf_Pages/Index_Rows_Per_Page^Level) donde 1 <= Nivel <= Niveles
Redondee cada sumando al número entero más próximo. Como ejemplo sencillo, considere un índice en el que Num_Leaf_Pages = 1000 e Index_Rows_Per_Page = 25. El primer nivel de índice por encima del nivel hoja almacena 1,000 filas de índice. Esto equivale a una fila de índice por página hoja, y se pueden ajustar 25 filas de índice en cada página. Esto significa que se necesitan 40 páginas para almacenar esas 1000 filas de índice. El siguiente nivel del índice debe almacenar 40 filas. Esto significa que necesita 2 páginas. El nivel final del índice debe almacenar 2 filas. Esto significa que necesita 1 página. Todo ello da lugar a 43 páginas no hoja de índice. Si se utilizan estos números en las fórmulas anteriores, el resultado será el siguiente:
Non-leaf_Levels = 1 + log(25) (1000 / 25) = 3
Num_Index_Pages = 1000/(25^3)+ 1000/(25^2) + 1000/(25^1) = 1 + 2 + 40 = 43, que es el número de páginas que se describe en el ejemplo.
Calcule el tamaño del índice (8192 bytes totales por página):
- Index_Space_Used = 8192 x Num_Index_Pages
Paso 4. Total de los valores calculados
Sume los valores obtenidos en los dos pasos anteriores:
Tamaño del índice no agrupado (bytes) = Leaf_Space_Used + Index_Space_used
Este cálculo no tiene en cuenta las siguientes condiciones:
Creación de particiones: la sobrecarga de espacio de la creación de particiones es mínima, pero compleja de calcular. No es necesario incluirlo.
Páginas de asignación: Hay al menos una página de IAM que se usa para seguir las páginas asignadas a un montón, pero la sobrecarga del espacio es mínima y no existe un algoritmo que pueda calcular de manera determinista exactamente cuántas páginas IAM usar.
Valores de objetos grandes (LOB): el algoritmo para determinar exactamente cuánto espacio se usará para almacenar los tipos de datos LOB varchar(max), varbinary(max), nvarchar(max), text, ntext, xml y los valores de imagen es complejo. Basta con agregar el tamaño medio de los valores LOB esperados, multiplicar por Num_Rows y agregarlo al tamaño total de índice no clúster.
Compresión: no se puede calcular previamente el tamaño de un índice comprimido.
Columnas dispersas: para obtener información sobre los requisitos de espacio de las columnas dispersas, consulte Uso de columnas dispersas.