Jimmy Nilsson omawia swoją koncepcję przewodnika COMB here. Ta koncepcja jest popularna w NHibernate, wśród innych kręgów, ze względu na jego rzekomą wartość wydajności w stosunku do standardowych identyfikatorów GUID, które są zazwyczaj znacznie bardziej losowe.Wartość wydajności komunikatów COMB
Jednak w teście nie wydaje się, aby tak się stało. Czy czegoś brakuje?
przypadek testowy:
Mam tabeli o nazwie temp (nie temp tabeli, tylko tabelę o nazwie „temp”) z 585.000 wierszy w nim. Mam nową tabelę o nazwie Kody i chcę skopiować wszystkie 585,000 wartości kodu z tabeli tymczasowej do tabeli kodów. Badanie realizowane było SQL I:
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
wydajność przy standardowych wartości GUID:
SQL Server Execution Times: CPU czas = 17250 ms, czas, jaki upłynął = 15735 ms.
(585000 row (s) affected)
Wyniki z wartościami GUID grzebień:
SQL Server Execution Times: CPU czas = 17500 ms, czas, jaki upłynął = 16419 ms.
(585000 row (s) affected)
Czego mi brakuje? wartości GUID COMB były nieco dłuższe, prawdopodobnie z powodu dodatkowych konwersji. Pomyślałem, że chodzi o to, by skrócić czas wstawiania przez pół-porządkowanie GUIDS, używając daty dla ostatnich 6 bajtów, ale przyrost wydajności wydaje się nie istnieć.
Czy my lub jakakolwiek odpowiedź spełniać swoje pytanie? – gbn
@ Chris: Czy gbn jest poprawny? – jgauffin