Plano de Execução – Parte 1

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:

IconeExecutionPlan

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:Execution Plan

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:

Execution Plan Basics

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

3 thoughts on “Plano de Execução – Parte 1”

Deixe uma resposta