O armazenamento heap não tem nada a ver com esses heaps .
Heap significa apenas que os próprios registros não são ordenados (ou seja, não vinculados um ao outro).
Quando você insere um registro, ele apenas é inserido no espaço livre que o banco de dados encontra.
Atualizar uma linha em uma tabela baseada em heap não afeta outros registros (embora afete índices secundários)
Se você criar um índice secundário em um
HEAP
tabela, o RID
(uma espécie de ponteiro físico para o espaço de armazenamento) é usado como um ponteiro de linha. Índice agrupado significa que os registros fazem parte de uma
B-Tree
. Quando você insere um registro, a B-Tree
precisa ser religado. Atualizar uma linha em uma tabela clusterizada causa revinculação da B-Tree, i. e. atualizando ponteiros internos em outros registros.
Se você criar um índice secundário em uma tabela clusterizada, o valor da chave de índice clusterizado será usado como um ponteiro de linha.
Isso significa que um índice clusterizado deve ser exclusivo. Se um índice clusterizado não for exclusivo, uma coluna oculta especial chamada
uniquifier
é anexado à chave de índice que o torna único (e maior em tamanho). Também vale a pena notar que a criação de um índice secundário em uma coluna faz com que os valores ou a chave do índice clusterizado façam parte da chave do índice secundário.
Ao criar um índice em uma tabela clusterizada, você sempre obtém um índice composto
CREATE UNIQUE CLUSTERED INDEX CX_mytable_1234 (col1, col2, col3, col4)
CREATE INDEX IX_mytable_5678 (col5, col6, col7, col8)
Índice
IX_mytable_5678
é de fato um índice nas seguintes colunas:col5
col6
col7
col8
col1
col2
col3
col4
Isso tem mais um efeito colateral:
Um DESC
condição em um índice de coluna única em uma tabela clusterizada faz sentido no SQL Server
Este índice:
CREATE INDEX IX_mytable ON mytable (col1)
pode ser usado em uma consulta como esta:
SELECT TOP 100 *
FROM mytable
ORDER BY
col1, id
, enquanto este:
CREATE INDEX IX_mytable ON mytable (col1 DESC)
pode ser usado em uma consulta como esta:
SELECT TOP 100 *
FROM mytable
ORDER BY
col1, id DESC