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