Internamente, como o SQL Server determina o resultado de um select(*)
? É diferente entre um heap e um índice clusterizado? É capaz de fazer coisas inteligentes com o índice clusterizado para não precisar carregar a tabela inteira?
Internamente, como o SQL Server determina o resultado de um select(*)
? É diferente entre um heap e um índice clusterizado? É capaz de fazer coisas inteligentes com o índice clusterizado para não precisar carregar a tabela inteira?
Com uma consulta trivial
SELECT COUNT(*) FROM dbo.YourTable;
em uma tabela baseada em disco, o SQL Server conta as linhas verificando os nós de heap ou folha de um índice. O otimizador do SQL Server baseado em custo escolhe o mais estreito disponível para minimizar o número de páginas digitalizadas.Este exemplo mostra o comportamento com uma verificação de índice .
Tamanhos de índice/heap:
Se fragmentarmos o índice, ele se tornará maior que o heap, de modo que o heap será verificado em vez do índice:
Heap e tamanho do índice com fragmentação:
Depois que o índice é reconstruído, o índice é verificado novamente porque é mais estreito:
Heap e tamanho do índice após a reconstrução: