Inicial > SQL Server > Operador do dia – Concatenation

Operador do dia – Concatenation

 

clip_image001  Concatenation

O operador de hoje é o concatenetion, seu comportamento é bem simples, ele recebe vários inputs, concatena tudo e retorna cada linha lida. Ele pode ser visualizado quando utilizado o comando UNION ALL.

É um exemplo clássico de operadores que recebem mais de um input, e tem mais de um filho.

Antes de iniciar a falar sobre ele vamos entender alguns pontos importantes em relação aos operadores dos Planos de Execução.

Todos os operadores executam os mesmos comandos de Init(), GetNext() e Close(), e estes operadores podem receber um ou mais filhos como input, vamos ver alguns exemplos.

Script para criação de tabela de teste.

USE tempdb

GO

CREATE TABLE TABTeste(ID   Int Identity(1,1) PRIMARY KEY,

                      Nome VarChar(250)      DEFAULT NewID())

GO

SET NOCOUNT ON

GO

INSERT INTO TABTeste DEFAULT VALUES

GO 10000

O comando acima cria uma tabela e inclui 10000 registros.

SELECT *

  FROM TABTeste a

 INNER JOIN TABTeste b

    ON a.ID = b.ID

Plano de execução estimado:

clip_image002

SELECT *     FROM TABTeste a   INNER JOIN TABTeste b      ON a.ID = b.ID

  |–Merge Join(Inner Join, MERGE:([b].[ID])=([a].[ID]), RESIDUAL:([tempdb].[dbo].[TABTeste].[ID] as [b].[ID]=[tempdb].[dbo].[TABTeste].[ID] as [a].[ID]))

       |–Clustered Index Scan(OBJECT:([tempdb].[dbo].[TABTeste].[PK__TABTeste__3214EC2743869CDD] AS [b]), ORDERED FORWARD)

       |–Clustered Index Scan(OBJECT:([tempdb].[dbo].[TABTeste].[PK__TABTeste__3214EC2743869CDD] AS [a]), ORDERED FORWARD)

Como podemos observar, na consulta acima o SQL utilizou o operador de MERGE para fazer a operação de Join entre as tabelas do select, e neste caso ele está recebendo dois filhos(duas vezes a tabela TABTeste) como input.

O operador de hoje, o Concatenation é um exemplo de operadores que tem mais de um filho como input.

SELECT * FROM TABTeste

UNION ALL

SELECT * FROM TABTeste

UNION ALL

SELECT * FROM TABTeste

UNION ALL

SELECT * FROM TABTeste

clip_image003

SELECT * FROM TABTeste  UNION ALL   SELECT * FROM TABTeste  UNION ALL   SELECT * FROM TABTeste  UNION ALL   SELECT * FROM TABTeste

  |–Concatenation

       |–Clustered Index Scan(OBJECT:([tempdb].[dbo].[TABTeste].[PK__TABTeste__3214EC2743869CDD]))

       |–Clustered Index Scan(OBJECT:([tempdb].[dbo].[TABTeste].[PK__TABTeste__3214EC2743869CDD]))

       |–Clustered Index Scan(OBJECT:([tempdb].[dbo].[TABTeste].[PK__TABTeste__3214EC2743869CDD]))

       |–Clustered Index Scan(OBJECT:([tempdb].[dbo].[TABTeste].[PK__TABTeste__3214EC2743869CDD]))

O operador Concatenation recebe o resultado dos scans efetuados pelo Clustered Index Scan e copia as linhas lidas para o Outupt, e repete este processo para todos os Inputs.

O SQL irá executar este processo na ordem que é exibido o
plano, neste caso, o primeiro scan é o acima e o ultimo é o abaixo.

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: