Banco de Dados - SQL Server
Insert Top (N) X Insert Select Top (N)
Este artigo tem por objetivo mostrar a diferença dos resultados obtidos com o use dos comandos INSERT TOP (N) e INSERT SELECT TOP (N)
por Luiz Phellipe Euzebio DamiãoEsses dias, navegando em fóruns técnicos na internet, me deparei com um post de uma pessoa que estava com dúvida quanto ao uso do Insert Top (n) ou Insert Select Top(N) e resolvi escrever um pouco sobre o assunto.
Afinal, qual a diferença entre as duas sentenças abaixo:
Insert Top(1) Into tbInsertTopN
Select Codigo,
Descricao
From tbFonteDados
Order by Codigo Desc
Insert Into tbSelectTopN
Select Top(1) Codigo,
Descricao
From tbFonteDados
Order by Codigo Desc
Tirando o fato de que os dados são inseridos em duas tabelas diferentes, as duas instruções aparentam fazer a mesma coisa, ou seja, inserirem o primeiro registro do Select nas tabelas especificadas no Insert. Mas na prática elas fazem a mesma coisa? Na verdade, não.
O que acontece na prática, é que no primeiro caso(INSERT TOP(n)) o SQL não efetua o Sort (Ordenação) dos valores. Logo, o primeiro valor que retornar no select será incluido na tabela especificada no Insert, como podemos no plano de execução da query na figura a seguir.
Já no segundo caso, o SQL Server efetua o Sort antes de inserir os registros na tabela especificada no Insert (Note que é um processo mais trabalhoso para o sql pois ele tem que ler os registros, ordená-los e só depois inserir).
Espero que seja útil, e que tenha ficado bem claro.
Em anexo, tem o script utilizado para o teste. Até a próxima.
- Representando dados em XML no SQL ServerSQL Server
- Diferenças entre SEQUENCES x IDENTITY no Microsoft SQL Server 2012SQL
- Utilizando FILETABLE no SQL Server 2012SQL Server
- NHibernate com o Delphi Prism: Acessando um Banco de Dados SQL ServerVisual Studio
- Novidades no SQL Server Codinome DenaliSQL Server