Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Siga estas etapas para estimar a quantidade de espaço necessária para armazenar um índice não clusterizado:
Calcule variáveis para uso nas etapas 2 e 3.
Calcule o espaço usado para armazenar informações de índice no nível de folha do índice não agrupado.
Calcule o espaço usado para armazenar informações de índice nos níveis não foliares do índice não agrupado.
Total dos valores calculados.
Passo 1. Calcular variáveis para uso nas etapas 2 e 3
Você pode usar as etapas a seguir para calcular variáveis que são usadas para estimar a quantidade de espaço necessária para armazenar os níveis superiores do índice.
Especifique o número de linhas que estarão presentes na tabela:
- Num_Rows = número de linhas na tabela
Especifique o número de colunas de comprimento fixo e de comprimento variável na chave de índice e calcule o espaço necessário para o seu armazenamento:
As colunas-chave de um índice podem incluir colunas de comprimento fixo e de comprimento variável. Para estimar o tamanho da linha do índice de nível interior, calcule o espaço que cada um desses grupos de colunas ocupa dentro da linha de índice. O tamanho de uma coluna depende do tipo de dados e da especificação de comprimento.
- Num_Key_Cols = número total de colunas-chave (comprimento fixo e comprimento variável)
- Fixed_Key_Size = tamanho total de bytes de todas as colunas de chave de comprimento fixo
- Num_Variable_Key_Cols = número de colunas de chave de comprimento variável
- Max_Var_Key_Size = tamanho máximo de bytes de todas as colunas de chave de comprimento variável
Considere o localizador de linha de dados necessário se o índice não for exclusivo:
Se o índice não clusterizado não for exclusivo, o localizador de linha de dados será combinado com a chave de índice não clusterizada para produzir um valor de chave exclusivo para cada linha.
Caso o índice não clusterizado esteja sobre uma pilha, o localizador de linha de dados será o heap RID. Este é um tamanho de 8 bytes.
- Num_Key_Cols = Num_Key_ColsNum_Key_Cols + 1
- Num_Variable_Key_Cols = Num_Variable_Key_ColsNum_Variable_Key_Cols + 1
- = Max_Var_Key_SizeMax_Var_Key_Size + 8
Se o índice não clusterizado estiver sobre um índice clusterizado, o localizador de linha de dados será a chave de clustering. As colunas que devem ser combinadas com a chave de índice não clusterizada são aquelas colunas na chave de clustering que ainda não estão presentes no conjunto de colunas de chave de índice não clusterizadas.
Num_Key_Cols = Num_Key_Cols + número de colunas de chave de clustering que não estão no conjunto de colunas de chave de índice não clusterizadas (+ 1 se o índice clusterizado não for exclusivo)
Fixed_Key_Size = Fixed_Key_Size + tamanho total de bytes das colunas de chave de clusterização de comprimento fixo que não estão no conjunto de colunas de chave de índice não clusterizadas
Num_Variable_Key_Cols = Num_Variable_Key_Cols + número de colunas de chave de comprimento variável para agrupamento que não estão no conjunto de colunas de chave do índice não agrupado (+ 1 se o índice agrupado não for exclusivo)
Max_Var_Key_Size = Max_Var_Key_Size + tamanho máximo de bytes de colunas de chave de agrupamento de comprimento variável que não estejam no conjunto de colunas de chave de índice não agrupadas (+ 4 se o índice de agrupamento não for exclusivo)
Parte da linha, conhecida como mapa de bits nulo, pode ser reservada para gerir a nulidade da coluna. Calcule o seu tamanho:
Se houver colunas anuláveis na chave de índice, incluindo quaisquer colunas de chave de clustering necessárias, conforme descrito na Etapa 1.3, parte da linha de índice será reservada para o bitmap nulo.
- Index_Null_Bitmap = 2 + ((número de colunas na linha de índice + 7) / 8)
Apenas a parte inteira da expressão anterior deve ser usada. Elimine qualquer resto.
Se não houver colunas de chave anuláveis, defina Index_Null_Bitmap como 0.
Calcule o tamanho dos dados de comprimento variável:
Se houver colunas de comprimento variável na chave de índice, incluindo quaisquer colunas de chave de índice clusterizadas necessárias, determine quanto espaço é usado para armazenar as colunas dentro da linha de índice:
- Variable_Key_Size = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size
Os bytes adicionados a Max_Var_Key_Size são para controlar cada coluna variável. Esta fórmula assume que todas as colunas de comprimento variável estão 100% cheias. Se você antecipar que uma porcentagem menor do espaço de armazenamento da coluna de comprimento variável será usada, poderá ajustar o valor Max_Var_Key_Size por essa porcentagem para obter uma estimativa mais precisa do tamanho geral da tabela.
Se não houver colunas de comprimento variável, defina Variable_Key_Size como 0.
Calcule o tamanho da linha de índice:
- Index_Row_Size = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 (para a sobrecarga do cabeçalho da linha de uma linha de índice) + 6 (para o ponteiro de ID da página filha)
Calcule o número de linhas de índice por página (8.096 bytes livres por página):
- Index_Rows_Per_Page = 8096 / (Index_Row_Size + 2)
Como as linhas de índice não abrangem páginas, o número de linhas de índice por página deve ser arredondado para baixo para a linha inteira mais próxima. O 2 na fórmula refere-se à entrada da linha na matriz de slots da página.
Passo 2. Calcular o espaço usado para armazenar informações de índice no nível da folha
Você pode usar as etapas a seguir para estimar a quantidade de espaço necessária para armazenar o nível de folha do índice. Você precisa dos valores preservados da Etapa 1 para concluir esta etapa.
Especificar o número de colunas de comprimento fixo e de comprimento variável ao nível da folha e calcular o espaço necessário para o seu armazenamento:
Você pode estender um índice não clusterizado incluindo colunas não-chave além das colunas de chave de índice. Essas colunas adicionais são armazenadas apenas no nível de folha do índice não agrupado. Para obter mais informações, consulte Criar índices com colunas incluídas.
Note
Você pode combinar varchar, nvarchar, varbinaryou sql_variant colunas que fazem com que a largura total da tabela definida exceda 8.060 bytes. O comprimento de cada uma dessas colunas ainda deve estar dentro do limite de 8.000 bytes para uma coluna varchar, varbinary, ou sql_variant, e 4.000 bytes para nvarchar colunas. No entanto, suas larguras combinadas podem exceder o limite de 8.060 bytes em uma tabela. Isso também se aplica a linhas de folha de índice não agrupadas que incluíram colunas.
Se o índice não clusterizado não tiver nenhuma coluna incluída, use os valores da Etapa 1, incluindo quaisquer modificações determinadas na Etapa 1.3:
- Num_Leaf_Cols = Num_Key_Cols
- = Fixed_Leaf_SizeFixed_Key_Size
- = Num_Variable_Leaf_ColsNum_Variable_Key_Cols
- Max_Var_Leaf_Size = Max_Var_Key_Size
Se o índice não clusterizado tiver colunas incluídas, adicione os valores apropriados aos valores da Etapa 1, incluindo quaisquer modificações na Etapa 1.3. O tamanho de uma coluna depende do tipo de dados e da especificação de comprimento. Para obter mais informações, consulte Tipos de dados.
- Num_Leaf_Cols = Num_Key_Cols + número de colunas incluídas
- Tamanho_Fixo_da_Folha = Tamanho_Fixo_da_Chave + tamanho total de bytes de colunas incluídas de comprimento fixo
- Num_Variable_Leaf_Cols = Num_Variable_Key_Cols + número de colunas incluídas de comprimento variável
- Max_Var_Leaf_Size = Max_Var_Key_Size + tamanho máximo em bytes de colunas incluídas com comprimento variável
Tenha em conta o identificador de linha de dados:
Se o índice não clusterizado não for exclusivo, a sobrecarga para o localizador de linha de dados já foi considerada na Etapa 1.3 e nenhuma modificação adicional será necessária. Vá para a próxima etapa.
Se o índice não agrupado for exclusivo, o localizador de linha de dados deverá ser contabilizado em todas as linhas no nível da folha.
Se o índice não clusterizado estiver sobre um heap, o localizador de linha de dados será o RID do heap (tamanho 8 bytes).
- Num_Leaf_Cols = Num_Leaf_ColsNum_Leaf_Cols + 1
- = Num_Variable_Leaf_ColsNum_Variable_Leaf_Cols + 1
- Max_Var_Leaf_Size = Max_Var_Leaf_SizeMax_Var_Leaf_Size + 8
Se o índice não clusterizado estiver sobre um índice clusterizado, o localizador de linha de dados será a chave de clustering. As colunas que devem ser combinadas com a chave de índice não clusterizada são aquelas colunas na chave de clustering que ainda não estão presentes no conjunto de colunas de chave de índice não clusterizadas.
Num_Leaf_Cols = Num_Leaf_Cols + número de colunas de chave de clustering que não estão no conjunto de colunas de chave de índice não clusterizadas (+ 1 se o índice clusterizado não for exclusivo)
Fixed_Leaf_Size = Fixed_Leaf_Size + número de colunas de chave de clustering de comprimento fixo que não estão no conjunto de colunas de chave de índice não clusterizadas
Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + número de colunas de chave de clustering de comprimento variável que não estão no conjunto de colunas de chave de índice não clusterizadas (+ 1 se o índice clusterizado não for exclusivo)
Max_Var_Leaf_Size = Max_Var_Leaf_Size + tamanho em bytes das colunas de chave de clustering de comprimento variável que não estão no conjunto de colunas de chave de índice não clusterizadas (+ 4 se o índice clusterizado não for exclusivo)
Calcule o tamanho nulo do bitmap:
- Leaf_Null_Bitmap = 2 + ((Num_Leaf_Cols + 7) / 8)
Apenas a parte inteira da expressão anterior deve ser usada. Elimine qualquer resto.
Calcule o tamanho dos dados de comprimento variável:
Se houver colunas de comprimento variável (colunas de chave ou incluídas), incluindo quaisquer colunas de chave de agrupamento necessárias, conforme descrito anteriormente na Etapa 2.2, determine quanto espaço é usado para armazenar as colunas dentro da linha de índice:
- Variable_Leaf_Size = 2 + (Num_Variable_Leaf_Cols x 2) + Max_Var_Leaf_Size
Os bytes adicionados a Max_Var_Key_Size são para controlar cada coluna variável. Esta fórmula assume que todas as colunas de comprimento variável estão 100% cheias. Se você antecipar que uma porcentagem menor do espaço de armazenamento da coluna de comprimento variável será usada, poderá ajustar o valor Max_Var_Leaf_Size por essa porcentagem para obter uma estimativa mais precisa do tamanho geral da tabela.
Se não houver colunas de comprimento variável (colunas de chave ou incluídas), defina Variable_Leaf_Size como 0.
Calcule o tamanho da linha de índice:
- Leaf_Row_Size = Fixed_Leaf_Size + Variable_Leaf_Size + Leaf_Null_Bitmap + 1 (para sobrecarga de cabeçalho de linha de uma linha de índice)
Calcule o número de linhas de índice por página (8.096 bytes livres por página):
- Leaf_Rows_Per_Page = 8096 / (Leaf_Row_Size + 2)
Como as linhas de índice não abrangem páginas, o número de linhas de índice por página deve ser arredondado para baixo para a linha inteira mais próxima. O 2 na fórmula refere-se à entrada da linha na matriz de slots da página.
Calcule o número de linhas livres reservadas por página, com base no fator de preenchimento especificado:
- Free_Rows_Per_Page = 8096 x ((100 - Fill_Factor) / 100) / (Leaf_Row_Size + 2)
O fator de preenchimento usado no cálculo é um valor inteiro em vez de uma porcentagem. Como as linhas não abrangem páginas, o número de linhas por página deve ser arredondado para baixo para a linha inteira mais próxima. À medida que o fator de preenchimento aumenta, mais dados são armazenados em cada página e há menos páginas. O 2 na fórmula refere-se à entrada da linha na matriz de slots da página.
Calcule o número de páginas necessárias para armazenar todas as linhas:
- Num_Leaf_Pages = Num_Rows / (Leaf_Rows_Per_Page - Free_Rows_Per_Page)
O número estimado de páginas deve ser arredondado para a página inteira mais próxima.
Calcule o tamanho do índice (8.192 bytes totais por página):
- Espaço_Folha_Utilizado = 8192 x Num_Páginas_de_Folha
Passo 3. Calcular o espaço usado para armazenar informações de índice nos níveis não foliares
Siga estas etapas para estimar a quantidade de espaço necessária para armazenar os níveis intermediário e raiz do índice. Para concluir este passo, você precisa dos valores preservados das etapas 2 e 3.
Calcule o número de níveis não foliares no índice:
- Níveis não foliares = 1 + log(Index_Rows_Per_Page) (Num_Leaf_Pages / Index_Rows_Per_Page)
Arredondar este valor para o número inteiro mais próximo. Esse valor não inclui o nível de folha do índice não agrupado.
Calcule o número de páginas não-folhas no índice:
- Num_Index_Pages = ∑_Nível (Num_Leaf_Pages/Index_Rows_Per_Page^Nível) onde 1 <= Nível <= Níveis
Arredondar cada soma para o número inteiro mais próximo. Como um exemplo simples, considere um índice onde Num_Leaf_Pages = 1000 e Index_Rows_Per_Page = 25. O primeiro nível de índice acima do nível de folha armazena 1.000 linhas de índice, que é uma linha de índice por página de folha, e 25 linhas de índice podem caber por página. Isso significa que são necessárias 40 páginas para armazenar essas 1.000 linhas de índice. O próximo nível do índice tem que armazenar 40 linhas. Isto significa que requer 2 páginas. O nível final do índice tem que armazenar 2 linhas. Isto significa que requer 1 página. Isto produz 43 páginas de índice não foliares. Quando estes números são utilizados nas fórmulas anteriores, o resultado é o seguinte:
Níveis não-folha = 1 + log(25) (1000 / 25) = 3
Num_Index_Pages = 1000/(25^3)+ 1000/(25^2) + 1000/(25^1) = 1 + 2 + 40 = 43, que é o número de páginas descrito no exemplo.
Calcule o tamanho do índice (8.192 bytes totais por página):
- Index_Space_Used = 8192 x Número_de_Páginas_Índice
Passo 4. Total dos valores calculados
Total dos valores obtidos nas duas etapas anteriores:
Tamanho do índice não clusterizado (bytes) = Espaço_Folha_Usado + Espaço_Índice_Usado
Este cálculo não considera as seguintes condições:
Particionamento: A sobrecarga de espaço do particionamento é mínima, mas complexa de calcular. Não é importante incluir.
Páginas de alocação: há pelo menos uma página do IAM usada para rastrear as páginas alocadas em um heap, mas a sobrecarga de espaço é mínima e não há algoritmo para calcular deterministicamente exatamente quantas páginas do IAM usar.
Valores de objeto grande (LOB): O algoritmo para determinar exatamente quanto espaço será usado para armazenar os tipos de dados LOB varchar(max), varbinary(max), nvarchar(max), text, ntext, xml e image é complexo. É suficiente apenas adicionar o tamanho médio dos valores de LOB esperados, multiplicar por Num_Rows e adicioná-lo ao tamanho total do índice não clusterizado.
Compressão: não é possível pré-calcular o tamanho de um índice compactado.
Colunas esparsas: para obter informações sobre os requisitos de espaço de colunas esparsas, consulte Usar colunas esparsas.