terça-feira, 4 de janeiro de 2011

Auto-incremento com o novo SEQUNCE no SQL Server 2011 Denali – Parte 2

Este artigo foi escrito utilizando o CTP de Novembro/2010 do SQL Server 2011 Denali.

No último post mostrei o SEQUENCE, um novo recurso para auto-incremento no SQL Server code named “Denali” (Auto-incremento com o novo SEQUENCE no SQL Server 2011 Denali – Parte 1). Neste post veremos uma comparação de desempenho entre IDENTITY e SEQUENCE.
Utilizei o script abaixo para comparar o desempenho:

USE master
go
CREATE DATABASE dbTeste
go
ALTER DATABASE dbTeste set recovery simple
go
use dbTeste
go

-- DROP TABLE dbo.tbIdentityCREATE TABLE dbo.tbIdentity (
PK int not null identity(1,1) primary key,
Nome varchar(50) not null)
go

-- DROP SEQUENCE ContadorCREATE SEQUENCE Contador AS int
MINVALUE 1 NO MAXVALUE START WITH 1;
go

-- DROP TABLE dbo.tbSequenceCREATE TABLE dbo.tbSequence (
PK int not null DEFAULT NEXT VALUE FOR Contador primary key,
Nome varchar(50) not null)
go


-- Inclui 1 milhão de linhas na tabela com IDENTITYDBCC DROPCLEANBUFFERS
go
declare @Nome varchar(50), @i int = 1
while @i <= 1000000 BEGIN set @Nome = 'Nome ' + LTRIM(str(@i)) INSERT dbo.tbIdentity (Nome) values (@Nome) set @i = @i + 1 END go -- Inclui 1 milhão de linhas na tabela com SEQUENCEDBCC DROPCLEANBUFFERS
go
declare @Nome varchar(50), @i int = 1
while @i <= 1000000 BEGIN set @Nome = 'Nome ' + LTRIM(str(@i)) INSERT dbo.tbSequence (Nome) values (@Nome) set @i = @i + 1 END go

Para garantir uma comparação sem interferência do cachê, utilizei o comando DBCC DROPCLEANBUFFERS entre as execuções, pois esta instrução limpa o cache do servidor. Veja o resultado no gráfico abaixo:


Em todos os testes que fiz encontrei uma pequena diferença de desempenho na inclusão de um grande volume de linhas, na inclusão de poucas linhas não observei diferença no desempenho.

Até o próximo post,
LandrySaudações tricolores: Fluzão Tri-Campeão Brasileiro!