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)