Jimmy Nilsson讨论了他的COMB guid概念,此处有详细介绍。在NHibernate等其他领域,这个概念因其相对于通常更为随机的标准GUID具有性能价值而受到欢迎。
然而,在测试中,这似乎并非如此。我有所遗漏吗?
测试用例:
我有一个名为temp的表(不是临时表,只是一个名为“temp”的表),其中有585,000行记录。我有一个新表称为Codes,并希望将temp表中的所有585,000个代码值复制到codes表中。我执行的测试SQL是:
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
使用标准GUID值的性能:
SQL Server执行时间:CPU 时间=17250毫秒,耗时=15735 毫秒。
(影响了585000行)
使用COMB GUID值的性能:
SQL Server执行时间:CPU 时间=17500毫秒,耗时=16419 毫秒。
(影响了585000行)
我错过了什么?使用COMB GUID值稍微增加了一些时间,这可能是由于额外的转换。我以为通过使用最后6个字节的日期对GUID进行半排序来减少插入时间,但是性能提升似乎不存在。