Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 folha do índice não clusterizado.
Calcule o espaço usado para armazenar informações de índice nos níveis não folha do índice não clusterizado.
Total dos valores calculados.
Etapa 1. Calcular variáveis para uso nas etapas 2 e 3
Você pode usar as etapas a seguir para calcular variáveis 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 armazenamento:
As colunas principais de um índice podem incluir colunas de comprimento fixo e comprimento variável. Para estimar o tamanho da linha de í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 de 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 que é necessário se o índice não for não exclusivo.
Se o índice não agrupado não for único, o localizador de linha de dados será combinado com a chave de índice não agrupado para produzir um valor de chave exclusivo para cada linha.
Se o índice não clusterizado estiver sobre um heap, o localizador da linha de dados será o RID do heap. Esse é 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 clusterizado são aquelas na chave de índice clusterizado que ainda não estão presentes no conjunto de colunas da chave de índice não clusterizado.
= Num_Key_ColsNum_Key_Cols + número de colunas de chave de agrupamento que não estão no conjunto de colunas de chave de índice não agrupado (+ 1 se o índice agrupado não for único)
= Fixed_Key_SizeFixed_Key_Size + tamanho total de bytes de colunas de chave de clustering de comprimento fixo que não estão no conjunto de colunas de chave de índice não clusterizado
= Num_Variable_Key_ColsNum_Variable_Key_Cols + número de colunas de chave de agrupamento de comprimento variável que não estão no conjunto de colunas de chave de índice não clusterizado (+ 1 se o índice clusterizado não for não exclusivo)
Max_Var_Key_Size = Max_Var_Key_SizeMax_Var_Key_Size + tamanho máximo de 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 clusterizado (+ 4 se o índice clusterizado não for único)
Parte da linha, conhecida como bitmap de nulidade, pode ser reservada para gerenciar a nulabilidade da coluna. Calcule seu tamanho:
Se houver colunas anuláveis na chave de índice, incluindo todas as 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)
Somente a parte inteiro da expressão anterior deve ser usada. Descarte qualquer restante.
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 todas as colunas de chave de índice clusterizado 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 acompanhar cada coluna variável. Essa fórmula pressupõe que todas as colunas de comprimento variável estejam 100% cheias. Se você prever que uma porcentagem menor do espaço de armazenamento de coluna de comprimento variável será usada, você poderá ajustar o valor Max_Var_Key_Size por esse percentual para produzir 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 de uma linha de índice) + 6 (para o ponteiro do ID da página filho)
Calcular o número de linhas de índice por página (8.096 bytes gratuitos 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 até a linha inteira mais próxima. O número 2 na fórmula é para a entrada da linha na matriz de slots da página.
Etapa 2. Calcular o espaço usado para armazenar informações de índice no nível folha
Você pode usar as etapas a seguir para estimar a quantidade de espaço necessária para armazenar o nível de folhas do índice. Você precisará dos valores preservados da Etapa 1 para concluir esta etapa.
Especifique o número de colunas de comprimento fixo e de comprimento variável no nível folha e calcule o espaço necessário para o armazenamento:
Observação
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 folha do índice não clusterizado. Para obter mais informações, consulte Create Indexes with Included Columns.
Observação
Você pode combinar
varchar,nvarcharouvarbinarysql_variantcolunas 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 umavarchar,varbinaryousql_variantcoluna, e 4.000 bytes paranvarcharcolunas. No entanto, suas larguras combinadas podem exceder o limite de 8.060 bytes em uma tabela. Isso também se aplica a linhas folha de índice não clusterizado que incluíram colunas.Se o índice não clusterizado não tiver colunas incluídas, use os valores da Etapa 1, incluindo as modificações determinadas na Etapa 1.3:
Num_Leaf_Cols = Num_Key_Cols
Tamanho_Fixo_da_Folha = Tamanho_Fixo_da_Chave
= 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 Data Types (Transact-SQL).
Num_Leaf_Cols = Num_Key_Cols + número de colunas incluídas
Fixed_Leaf_Size = Fixed_Key_Size + tamanho total de bytes de colunas de comprimento fixo incluídas
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 de bytes de colunas incluídas com comprimento variável
Considere o identificador de linha de dados:
Se o índice não clusterizado não forunique, a sobrecarga do 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 clusterizado for exclusivo, o localizador de linha de dados deverá ser contabilizado em todas as linhas no nível folha.
Se o índice não clusterizado estiver sobre um heap, o localizador de linha de dados será o RID de heap (tamanho 8 bytes).
Num_Leaf_Cols = Num_Leaf_ColsNum_Leaf_Cols + 1
Num_Variable_Leaf_Cols = Num_Variable_Leaf_Cols + 1
Max_Var_Leaf_Size = Max_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 clusterizado são aquelas na chave de índice clusterizado que ainda não estão presentes no conjunto de colunas de chave de índice não clusterizado.
Num_Leaf_Cols = Num_Leaf_Cols + o número de colunas de chave de agrupamento que não estão no conjunto de colunas de chave de índice não agrupado (+ 1 se o índice agrupado não for único)
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 agrupadas
= Num_Variable_Leaf_ColsNum_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 clusterizado (+ 1 se o índice clusterizado não forunique)
= Max_Var_Leaf_SizeMax_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 clusterizado (+ 4 se o índice clusterizado não forunique)
Calcule o tamanho nulo do bitmap:
Leaf_Null_Bitmap = 2 + ((Num_Leaf_Cols + 7) / 8)
Somente a parte inteiro da expressão anterior deve ser usada. Descarte qualquer restante.
Calcule o tamanho dos dados de comprimento variável:
Se houver colunas de comprimento variável na chave de índice, incluindo todas as colunas de chave de clustering necessárias, conforme descrito anteriormente na Etapa 2.2, determine quanto espaço é usado para armazenar as colunas na 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 acompanhar cada coluna variável. Essa fórmula pressupõe que todas as colunas de comprimento variável estejam 100% cheias. Se você prever que uma porcentagem menor do espaço de armazenamento de coluna de comprimento variável será usada, você poderá ajustar o valor Max_Var_Leaf_Size por esse percentual para produzir uma estimativa mais precisa do tamanho geral da tabela.
Se não houver colunas de comprimento variável, defina Variable_Leaf_Size como 0.
Calcule o tamanho da linha de índice:
Tamanho_Folha_Linha = Tamanho_Fixo_Folha + Tamanho_Variável_Folha + Mapa_Nulo_Folha + 1 (para sobrecarga de cabeçalho de linha de uma linha de índice) + 6 (para o ponteiro da ID da página filho)
Calcular o número de linhas de índice por página (8.096 bytes gratuitos 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 até a linha inteira mais próxima. O número 2 na fórmula é para a entrada da linha na matriz de slots da página.
Calcule o número de linhas gratuitas 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 até a linha inteira mais próxima. À medida que o fator de preenchimento aumenta, mais dados serão armazenados em cada página e haverá menos páginas. O número 2 na fórmula é para a 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_PagesNum_Rows/ (Leaf_Rows_Per_Page - Free_Rows_Per_Page)
O número de páginas estimadas deve ser arredondado para a página inteira mais próxima.
Calcular o tamanho do índice (8192 bytes totais por página):
Espaço_de_Folha_Usado = 8192 x Número_de_Páginas_de_Folha
Etapa 3. Calcular o espaço usado para armazenar informações de índice nos níveis não folha
Siga estas etapas para estimar a quantidade de espaço necessária para armazenar os níveis intermediário e raiz do índice. Você precisará dos valores preservados das etapas 2 e 3 para concluir esta etapa.
Calcule o número de níveis que não são folhas no índice:
Níveis não folha = 1 + logaritmo na base Index_Rows_Per_Page (Num_Leaf_Pages / Index_Rows_Per_Page)
Arredondar esse valor até o número inteiro mais próximo. Esse valor não inclui o nível folha do índice não clusterizado.
Calcule o número de páginas não folhas no índice:
Num_Index_Pages = ∑Nível (Num_Leaf_Pages/Index_Rows_Per_PageNível) em que 1 <= Nível <= Níveis
Arredondar cada soma até 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 1000 linhas de índice, com uma linha de índice por página de folha, e 25 linhas de índice cabem em cada página. Isso significa que 40 páginas são necessárias para armazenar essas 1000 linhas de índice. O próximo nível do índice deve armazenar 40 linhas. Isso significa que ele requer 2 páginas. O nível final do índice deve armazenar 2 linhas. Isso significa que ele requer uma página. Isso gera 43 páginas de índice que não são folhas. Quando esses números são usados nas fórmulas anteriores, o resultado é o seguinte:
Níveis não-folha = 1 + log25 (1000 / 25) = 3
Num_Index_Pages = 1000/(253)+ 1000/(252) + 1000/(251) = 1 + 2 + 40 = 43, que é o número de páginas descritas no exemplo.
Calcular o tamanho do índice (8192 bytes totais por página):
Espaço_de_Índice_Usado = 8192 x Num_de_Páginas_do_Índice
Etapa 4. Total dos valores calculados
Total dos valores obtidos das duas etapas anteriores:
Tamanho do índice não clusterizado (bytes) = Leaf_Space_Used + Index_Space_used
Esse cálculo não considera o seguinte:
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 IAM usada para acompanhar as páginas alocadas para um heap, mas a sobrecarga de espaço é mínima e não há nenhum algoritmo para calcular deterministicamente exatamente quantas páginas IAM serão usadas.
Valores de LOB (Objeto Grande)
O algoritmo para determinar exatamente quanto espaço será usado para armazenar os tipos
varchar(max)de dados LOB,varbinary(max), ,nvarchar(max),text,ntextexmlimagevalores é complexo. É suficiente apenas adicionar o tamanho médio dos valores LOB esperados, multiplicar por Num_Rows e adicioná-lo ao tamanho total do índice não clusterizado.Compactação
Não é possível calcular previamente 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.
Consulte Também
Índices clusterizados e não clusterizados descritos
Criar índices não clusterizados
Criar índices clusterizados
Estimar o tamanho de uma tabela
Estimar o tamanho de um índice clusterizado
Estimar o tamanho de um heap
Estimar o tamanho de um banco de dados