AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 216638
Accepted
MJH
MJH
Asked: 2018-09-05 00:32:27 +0800 CST2018-09-05 00:32:27 +0800 CST 2018-09-05 00:32:27 +0800 CST

Estatísticas de IO para busca de índice

  • 772

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)

sql-server sql-server-2014
  • 1 1 respostas
  • 172 Views

1 respostas

  • Voted
  1. Best Answer
    Dan Guzman
    2018-09-05T03:32:48+08:002018-09-05T03:32:48+08:00

    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.

    • 2

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve