Pergunta sobre índice não clusterizado com colunas incluídas (DB - MS SQL Server). Eu li o blog Optimized Non-clustered Index Maintenance, que fornece informações sobre planos de consulta quando as instruções de atualização são executadas e o índice clusterizado e o índice não clusterizado são definidos para a tabela.
Eu tenho uma pergunta sobre um índice não clusterizado com colunas incluídas. Estou me referindo ao mesmo exemplo fornecido pelo blogger
CREATE TABLE T (PK INT, A INT, B INT, C INT, D INT, E INT)
CREATE UNIQUE CLUSTERED INDEX TPK ON T(PK)
CREATE INDEX TB ON T(B)
CREATE INDEX TCD ON T(C,D)
CREATE INDEX TE ON T(E)
-- este é um novo índice não clusterizado com colunas incluídas
CREATE INDEX TF ON T(E) INCLUDE(A)
INSERT T VALUES(0, 10, 20, 30, 40, 50)
UPDATE T SET A = 19
Se nenhum índice TF for definido, somente a atualização no índice clusterizado será executada e as operações de inserção e exclusão de índice não clusterizado não serão executadas. Mas o que acontecerá quando o TF for definido?
Assim como quando você atualiza um valor em um índice armazenado em páginas folha e não folha, todas essas páginas são atualizadas com o novo valor. As colunas armazenadas no nível folha somente por meio de inclusão são atualizadas quando você atualiza os valores. É possível que isso também leve a divisões de página.
A postagem do blog à qual você faz referência também indica como você mesmo poderia ter respondido a isso.
Se você executar
O plano parece
mostrando um plano por linha/estreito onde o índice
TF
é listado como um dos objetos atualizados.Se o TF estiver definido, ele deverá ser atualizado. Isso ocorre porque o valor de A está incluído no nível folha do TF. Uma atualização na coluna A terá que refletir esse valor no índice TF.
Esta é a razão pela qual você tem um índice de inclusão TF, para que você não precise procurar em A, quando você precisa apenas das colunas E ou A.