Джимми Нильссон обсуждает концепцию концепции COMB здесь. Эта концепция популярна в NHibernate, среди других кругов, для предполагаемого значения производительности по сравнению с стандартными идентификаторами GUID, которые обычно намного более случайны.
Однако при тестировании это, похоже, не так. Я что-то пропустил?
Тестовый пример:
У меня есть таблица под названием temp (не временная таблица, а только таблица с именем temp) с 585 000 строк в ней. У меня есть новая таблица под названием "Коды" и вы хотите скопировать все 585 000 значений кода из таблицы temp в таблицу кодов. Выполненный мной 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 строк)
Производительность с значениями GUID COMB:
Время выполнения SQL Server: CPU время = 17500 мс, прошедшее время = 16419 мс.
(затронуто 585000 строк)
Что мне не хватает? Значения COMB GUID привели к чуть более продолжительным временам, по-видимому, из-за дополнительных преобразований. Я думал, что дело в том, чтобы уменьшить время вставки путем полуупорядочения GUIDS с использованием даты для последних 6 байтов, но прирост производительности не существует.