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