No SQL Server, um índice não clusterizado não exclusivo em uma tabela rowstore incorpora o marcador do objeto base (RID ou chave de clustering) em todos os níveis da estrutura do índice não clusterizado. O marcador é armazenado como parte da chave de índice não clusterizado em todos os níveis de índice.
Por outro lado, se o índice não clusterizado for exclusivo , o marcador estará presente apenas no nível folha do índice - não como parte da chave (o marcador está presente como uma ou mais colunas incluídas, na verdade).
No SQL Server 2016, é possível criar um índice b-tree não clusterizado em uma tabela orientada a colunas (uma que tenha um índice columnstore clusterizado).
- Qual é o 'marcador' usado para um índice de árvore b não clusterizado em uma tabela columnstore clusterizada?
- As diferenças entre índices não clusterizados exclusivos e não exclusivos descritos acima ainda se aplicam?
O "marcador" é o localizador original do índice columnstore (de acordo com "Pro SQL Server Internals" de Dmitri Korotkevitch). Este é um valor de 8 bytes, com o índice columnstore
row_group_id
nos primeiros 4 bytes e um deslocamento nos segundos 4 bytes.Se você usar
DBCC PAGE
para examinar o índice não clusterizado, o localizador original do índice columnstore de 8 bytes aparecerá na coluna "uniquificador" daDBCC PAGE
saída. Isso mostra que um índice não clusterizado exclusivo não precisa incluir o localizador de linha columnstore, enquanto um índice não clusterizado não exclusivo precisa.O código a seguir cria uma tabela organizada por columnstore com um índice não clusterizado de árvore b exclusivo e não exclusivo na mesma coluna:
Podemos ver o tamanho da linha do índice em diferentes níveis da b-tree usando
sys.dm_db_index_physical_stats
:A saída é:
Ambas as estruturas têm o mesmo tamanho de linha no nível folha, mas o índice não clusterizado não exclusivo é 12 bytes maior que o índice não clusterizado exclusivo nos níveis não folha devido ao localizador columnstore de 8 bytes, mais 4 bytes de sobrecarga para a primeira variável -comprimento coluna em uma linha (uniquifier é comprimento variável).