O Statistics IO (Leituras Lógicas/Físicas) inclui páginas de índice que não são de nível folha?
O exemplo a seguir foi retirado diretamente deste post antigo de Gail Shaw:
https://sqlinthewild.co.za/index.php/2009/03/05/when-is-a-seek-actually-a-scan/
--Setup
CREATE TABLE TestingSeeks (
id int identity (1,1) not null,
SomeStr char(6) default '' -- a filler
)
insert into TestingSeeks (SomeStr)
select top (500000) ''
from sys.columns c1 cross join sys.columns c2
CREATE NONCLUSTERED INDEX idx_Seek ON TestingSeeks (id)
--Example queries
--Query 1
select id
from TestingSeeks
--Query 2
select id
from TestingSeeks
where id > 0
--Saída de E/S de estatísticas para a consulta 1
(500.000 linhas afetadas) Tabela 'TestingSeeks'. Contagem de varredura 1, leituras lógicas 1120 , --Todas as outras colunas são zero
--Saída de E/S de estatísticas para a consulta 2
(500.000 linhas afetadas) Tabela 'TestingSeeks'. Contagem de varredura 1, leituras lógicas 1120 , --Todas as outras colunas são zero
Como você pode ver, as Leituras Lógicas são as mesmas para ambas as consultas (a Busca e a Varredura), mas achei que a Busca teria mais páginas para ler, pois leria a página Raiz e as páginas do(s) nível(es) intermediário(s) de o índice.
Se eu executar a seguinte consulta:
--Seek for one row
--Query 3
select id
from TestingSeeks
where id = 400
--Saída de E/S de estatísticas para a consulta 3
(1 linha(s) afetada) Tabela 'TestingSeeks'. Contagem de varredura 1, leituras lógicas 3 , --Todas as outras colunas são zero
Você pode ver que há três leituras (1. Página raiz, 2. Página intermediária, 3. Página em nível de folha), então por que as estatísticas para [Consulta 2] acima não incluem duas linhas a mais do que a Verificação (Consulta 1)?
SQL Server @@Version: Microsoft SQL Server 2014 (SP2-GDR) (KB4057120) - 12.0.5214.6 (X64) 9 de janeiro de 2018 15:03:12 Copyright (c) Microsoft Corporation Developer Edition (64 bits) no Windows NT 6.1 (Compilação 7601: Service Pack 1)
Sim, as leituras lógicas incluem páginas de índice de nível não folha.
Para a varredura de índice na primeira consulta, a primeira página lógica é localizada percorrendo a b-tree para encontrar a primeira página de folha de índice, seguida por uma varredura de todo o índice em ordem lógica. Essas estatísticas incluem as 2 páginas não-folha e todas as páginas-folha do índice.
Para a busca de índice na segunda consulta, a primeira página lógica que satisfaz os critérios é localizada percorrendo a b-tree seguida por uma varredura das páginas folha. Essas estatísticas incluem as mesmas 2 páginas não-folha, a varredura completa necessária para localizar a primeira página (supondo que não existam linhas antes do valor da chave zero ou que estejam na primeira página). O mesmo número de páginas folha é tocado porque todas as páginas se qualificam para o predicado de busca.
O predicado de igualdade na terceira consulta toca o mesmo número de páginas não-folha da hierarquia b-tree que as 2 primeiras consultas, embora talvez diferentes páginas não-raiz, Apenas uma única página-folha é necessária para satisfazer o predicado para um total de 3 IOs lógicos.