Изисквания: При използване на GUID като първични индекси за агрегиране на ключове, се препоръчва използването на подредени GUID, тъй като неподредени GUID ще причинят загуба на място и съответно намаляване на ефективността на четене и запис.
Преглед:
Стойност на GUID в базата данни
Глобално уникалните идентификатори (GUID) типове данни в SQL Server се представят чрез типове данниУникален идентификатор, който съхранява 16-байтова двоична стойност. GUID е двоичен номер, чиято основна цел е да бъде идентификатор, който трябва да бъде уникален в мрежа с много компютри на много места.
И Guid, и SqlGuid имат начини за сравнение на различни стойности на GUID. Имплементацията на SqlGuid използва поведението на SQL Server,Последните шест байта от стойността са най-важните。
Последователните GUID файлове са по същество предсказаеми, така че не ги използвайте в контексти, чувствителни към сигурността。
Препратка:Входът към хиперлинк е видим.
Базата данни е подредена от GUID
SQL Server базата данни има такъвNewSequentialId()функция за създаване на подреден GUID. При създаване на таблица можете да я зададете като стандартна стойност на поле тип GUID и автоматично да създадете стойността на първичния ключ при вмъкване на нови данни (тази функция може да се използва само като стандартна стойност на полето, не се извиква директно в SQL).
Пример:
Функцията NewSequentialId() може да се използва само в бази данни, въпреки че MSDN документацията на Microsoft посочва, че NEWSEQUENTIALID е обвивка за функцията Windows UuidCreateSequential.
Съвет: Не използвайте функцията, ако става въпрос за поверителност. ЗащотоВъзможно е да се предположи стойността на следващия генериран GUIDза достъп до данните, свързани с този GUID.
Препратка:Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
.NET създава подреден GUID
Функцията UuidCreateSequential зависи от изчислителния хардуер на методаПоследните 12 бита всъщност са MAC адресът на мрежовата карта。
Кодът е следният:
Резултатите са следните:
Недостатък:
- Този метод изисква DllImport да извикне Windows библиотеката, така че не е кросплатформен.
- Не може да се използва в клъстерна среда, където няколко машини записват в една и съща база данни, защото получените GUID файлове ще бъдат различни един от друг (функционално-зависим хардуер), което води до фрагментация на индекса.
- Ако вашият Windows сървър стартира отново, GUID може да започне в по-нисък диапазон, което води до фрагментация на индекса.
Препратка:
Входът към хиперлинк е видим.
Входът към хиперлинк е видим.
Ако използвате .NET програма за създаване на SQL SERVER GUID, препоръчва се да използвате библиотека с класове на трета страна:RT. Гребен, командата Nuget е следната:
Кодът е следният:
Изход:
Препратка:Входът към хиперлинк е видим.
Подредени и неподредени фрагменти на индекса на първични ключове на GUID
Започнете, като създадете две таблици със следния скрипт:
Тестът въвежда 100 000 парчета данни, а кодът е следният:
Резултатите от теста са следните:
| GUID | Време, изразходвано (ms) | Плътност на сканирането [Най-добър брой: Реален брой], колкото по-висока е стойността, толкова по-добре | Логическа фрагментация при сканиране, колкото по-ниска е стойността, толкова по-добре | Средна плътност на страницата (пълна) (Средна. Плътността на страницата (пълна), колкото по-висока е стойността, толкова по-добре | | Неподреден GUID | 13367 | 12.58% [61:485] | 98.97% | 63.66% | | Поръчка GUID | 14139 | 100.00% [39:39] | 0.32% | 99.61% |
Тестът отново въвежда 1 милион данни данни, като GUID извън ред отнема 135203 ms, а ordined GUID 135134 ms. Заетостта на складовите помещения е следната:
Неподреден GUID: 36.547 MB Поръчан GUID: 26.609 MB
Препратка:Входът към хиперлинк е видим.
(Край)
|