Valor de desempenho de guias de COMB
Jimmy Nilsson discute seu conceito guiado COMBAqui. Esse conceito é popular no NHibernate, entre outros círculos, por seu suposto valor de desempenho sobre os GUIDs padrão, que geralmente são muito mais aleatórios.
No entanto, nos testes, isso não parece ser o caso. Estou esquecendo de algo?
Caso de teste:
Eu tenho uma tabela chamada temp (não uma tabela temporária, apenas uma tabela chamada "temp") com 585.000 linhas nele. Eu tenho uma nova tabela chamada Codes e desejo copiar todos os valores de código de 585.000 da tabela temporária para a tabela de códigos. O teste SQL que eu executei foi:
set statistics time on;
truncate table codes;
DBCC DBREINDEX ('codes', '', 90);
insert into codes (codeid, codevalue)
select newid(), codevalue from temp
truncate table codes;
DBCC DBREINDEX ('codes', '', 90);
insert into codes (codeid, codevalue)
select CAST(CAST(NEWID() AS BINARY(10)) + CAST(GETDATE() AS BINARY(6)) AS UNIQUEIDENTIFIER), codevalue from temp
Desempenho com valores padrão do GUID:
Tempos de Execução do SQL Server: Tempo de CPU = 17250 ms, tempo decorrido = 15735 ms.
(585000 fila (s) afetada)
Desempenho com valores de GUID COMB:
Tempos de Execução do SQL Server: Tempo de CPU = 17500 ms, tempo decorrido = 16419 ms.
(585000 fila (s) afetada)
o que estou perdendo? os valores do GUID COMB resultaram em tempos ligeiramente mais longos, presumivelmente por causa das conversões adicionais. Eu pensei que o ponto era reduzir o tempo de inserção ordenando os GUIDS usando a data dos últimos 6 bytes, mas o ganho de desempenho parece inexistente.