skip to Main Content

SEQUENCE no SQL Server – Parte 2

No último post mostrei como utilizar o SEQUENCE para auto incremento, segue link abaixo

Neste post veremos uma comparação de desempenho entre IDENTITY e SEQUENCE, execute o script abaixo:

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

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

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

-- DROP TABLE dbo.tbSequence
CREATE 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 IDENTITY
DBCC 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 SEQUENCE
DBCC 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,
Landry

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Back To Top