【发布时间】:2010-11-12 10:20:23
【问题描述】:
Jimmy Nilsson 讨论了他的 COMB guid 概念here。这个概念在 NHibernate 和其他圈子中很流行,因为它的性能价值高于标准 GUID,而标准 GUID 通常更加随机。
但是,在测试中,情况似乎并非如此。我错过了什么吗?
测试用例:
我有一个名为 temp 的表(不是临时表,只是一个名为“temp”的表),其中包含 585,000 行。我有一个名为 Codes 的新表,并希望将所有 585,000 个代码值从临时表复制到代码表。我执行的测试 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 个字节的日期对 GUIDS 进行半排序来减少插入时间,但性能提升似乎不存在。
【问题讨论】:
-
我的回答或任何回答是否满足您的问题?
-
@Chris:gbn 正确吗?
标签: sql sql-server performance tsql guid