Inicial > SQL Server > SET VS SELECT

SET VS SELECT

É muito comum durante o desenvolvimento de um código SQL necessitarmos zerar o valor das variáveis que serão utilizadas no código.

Uma dica em relação a performance é que o comando SELECT é mais rápido do que o SET, porém está regra só se aplica quando podemos substituir um bloco de SET por um SELECT por ex:

 

— Executa um loop zerando o valor de 10 variaveis utilizando SET

— Gere o plano de execução e repare que no plano de execução que no Loop o SQL gera um SELECT para cada comando SET.

DECLARE @i Int, @Test1 int, @Start datetime

DECLARE @V1 Char(6),

        @V2 Char(6),

        @V3 Char(6),

        @V4 Char(6),

        @V5 Char(6),

        @V6 Char(6),

        @V7 Char(6),

        @V8 Char(6),

        @V9 Char(6),

        @V10 Char(6);

 

SET @Test1 = 0

SET @i = 0

SET @Start = GetDate()

WHILE @i < 50000

BEGIN

  SET @V1 =

  SET @V2 =

  SET @V3 =

  SET @V4 =

  SET @V5 =

  SET @V6 =

  SET @V7 =

  SET @V8 =

  SET @V9 =

  SET @V10 =

      SET @i = @i + 1                  

END                               

SET @Test1 = DATEDIFF(ms, @Start, GetDate())

SELECT @test1

 

GO

— Executa um loop zerando o valor de 10 variaveis utilizando SELECT

— Diferente do primeiro plano de execução o SQL gerou apenas 1 instrução para setar os valores para as 10 variáveis.

DECLARE @i Int, @Test1 int, @Start datetime

DECLARE @V1 Char(6),

        @V2 Char(6),

        @V3 Char(6),

        @V4 Char(6),

        @V5 Char(6),

        @V6 Char(6),

        @V7 Char(6),

        @V8 Char(6),

        @V9 Char(6),

        @V10 Char(6);

 

SET @Test1 = 0

SET @i = 0

SET @Start = GetDate()

WHILE @i < 50000

BEGIN

SELECT @V1 = ,

       @V2 = ,

       @V3 = ,

       @V4 = ,

       @V5 = ,

       @V6 = ,

       @V7 = ,

       @V8 = ,

       @V9 = ,

       @V10 = ,

       @i = @i + 1;

END                               

SET @Test1 = DATEDIFF(ms, @Start, GetDate())

SELECT @test1

 

Uma outra observação importante é que o SQL usou muito mais CPU no primeiro comando do que no segundo vejamos o profiler.

 

 imagem

 

Fica a dica de utilizar o comando SELECT para atribuir valor a um bloco de variáveis.

 

Segue o link de um excelente artigo sobre o assunto.

http://vyaskn.tripod.com/differences_between_set_and_select.htm

 

__________________________________________________________________ 
Fabiano Neves Amorim (MCP – MCTS – SQL Server)
Análise – NewCon Enterprise
* fabiano@cnpm.com.br – http://fabianosqlserver.spaces.live.com/

( (55 – 14) 3404-3700

Categorias:SQL Server
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

%d blogueiros gostam disto: