Iniciaremos hoje uma série de artigos sobre o tema “Plano de Execução”. A ideia conforme já dito, é que vocês tenham a capacidade de identificar princípios básicos.
Para isto, criaremos a seguinte tabela em nosso banco de dados “DBATestes”:
[sourcecode language=”sql”]
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tblClientes](
[codigo_cliente] [int] NULL,
[nome_cliente] [nvarchar](100) NULL
) ON [PRIMARY]
GO
[/sourcecode]
Fazer a leitura desta tabela é bem simples, conforme você já conhece:
[sourcecode language=”sql”]
SELECT codigo_cliente, nome_cliente from dbo.tblClientes;
[/sourcecode]
Agora, você sabe como extrair o plano de execução desta consulta? É bem simples, basta selecionar a consulta e pressionar CONTROL-M, ou então, clicar no ícone conforme imagem abaixo:
O plano de execução gerado é chamado de Actual Execution Plan e nele podemos visualizar todo o fluxo seguido pelo SQL Server para execução da instrução. Além disso, no actual execution plan, podemos visualizar o que era estimado e o real, no futuro esta informação será de grande valia para nós.
Pois bem, executarmos esta consulta o que visualizamos é o plano de execução a seguir:
Algumas regras na leitura do plano de execução são:
- Ler da direita para esquerda;
- Cada etapa tem um custo relativo ao tempo de execução;
- O tamanho da “seta” que liga cada etapa, indica o tamanho da informação que por ali passou;
O que é o evento de Table Scan?
- Indica a realização de uma leitura completa da tabela, ou seja, cada linha foi lida. Se esta tabela, tivesse 1000 registros todos teriam sido lidos;
- Indica que a tabela não possui nenhum índice e o mais preocupante, não existe um índice do tipo Clustered (veremos posteriormente);
- Você pode considerar um table scan, mas se for para pequenas tabelas e que raramente são lidas, ao qual, em algumas situações então não é necessário ter um índice;
Table scan, o que (se) questionar?
- Existe alguma chave primária criada nesta tabela?
- Existe algum índice criado? Existe índice clustered na tabela?
Então, qual seria o próximo passo?
- Criar um clustered index.
No próximo artigo continuaremos a evolução e análise do plano de execução.
Você pode até achar que fui muito raso, mas irei detalhar tudo passo à passo e de maneira prática, mas caso queira, segue um artigo bem longo (porém excelente) para leitura:
Fique à vontade em dar o seu feedback ou explanar sua dúvida.
Obrigado por estar aqui!
Vithor da Silva e Silva | DBA SQL Server
vithor@vssti.com.br
Boa tarde Vithor, Só existe a parte 1?
Boa tarde Renato,
A parte 2 está disponível em http://www.vssti.com.br/blog/plano-de-execucao-parte-2/.
Bons estudos!