Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 3914|Отговор: 3

[Източник] [MSSQL] SQL SERVER подредени GUID и неподредени GUID като основни тестове за индекс на агрегиране на ключове

[Копирай линк]
Публикувано в 8.06.2023 г. 21:12:26 ч. | | | |
Изисквания: При използване на GUID като първични индекси за агрегиране на ключове, се препоръчва използването на подредени GUID, тъй като неподредени GUID ще причинят загуба на място и съответно намаляване на ефективността на четене и запис.

Преглед:

SQL Server оптимизирана за производителността индексна фрагментация
https://www.itsvse.com/thread-9508-1-1.html

[Turn] (MSSQL) SQL Server база данни int и guid за сравнение на първични ключове
https://www.itsvse.com/thread-10605-1-1.html

Стойност на 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 1336712.58% [61:485]98.97%63.66%
Поръчка GUID 14139100.00% [39:39]0.32%99.61%





Тестът отново въвежда 1 милион данни данни, като GUID извън ред отнема 135203 ms, а ordined GUID 135134 ms. Заетостта на складовите помещения е следната:

Неподреден GUID: 36.547 MB
Поръчан GUID: 26.609 MB



Препратка:Входът към хиперлинк е видим.


(Край)




Предишен:.NET Core програмни многоезични ресурси за четене и запис (.resx) файлове
Следващ:.NET/C# Stream Read оптимизация на дисковата памет
 Хазяин| Публикувано в 27.01.2024 г. 11:07:12 ч. |
ABP създава подреден GUID за базата данни на SQL сървъра, изходният код е следният:



 Хазяин| Публикувано в 24.03.2024 г. 11:43:45 ч. |
EF Core генерира подреден GUID код:





Входът към хиперлинк е видим.

 Хазяин| Публикувано в 11.04.2024 г. 15:00:11 ч. |
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com