Джимми Нильссон обсуждает свою концепцию COMB здесь . Эта концепция популярна в NHibernate среди других кругов за ее предполагаемое значение производительности по сравнению со стандартными 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: ЦП
время = 17250 мс, прошедшее время = 15735
мс.
(затронуто 585000 строк)
Производительность со значениями COMB GUID:
Время выполнения SQL Server: ЦП
время = 17500 мс, прошедшее время = 16419
мс.
(затронуто 585000 строк)
Чего мне не хватает? значения COMID GUID приводили к немного большему времени, предположительно из-за дополнительных преобразований. Я думал, что смысл состоит в том, чтобы сократить время вставки путем полупорядкового упорядочения GUIDS с использованием даты для последних 6 байтов, но прирост производительности, похоже, отсутствует.