Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 3914|Відповідь: 3

[Джерело] [MSSQL] SQL SERVER впорядкували GUID та невпорядковані GUID як первинні тести агрегації ключів

[Копіювати посилання]
Опубліковано 08.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 бази даних

Глобальні типи даних Unique Identifier (GUID) у SQL Server представлені типами данихунікальний ідентифікатор, який зберігає 16-байтове бінарне значення. GUID — це двійковий номер, основне призначення якого — бути ідентифікатором, який має бути унікальним у мережі з багатьма комп'ютерами на багатьох сайтах.

І Guid, і SqlGuid мають способи порівняння різних значень GUID. Реалізація SqlGuid використовує поведінку SQL Server,Останні шість байтів значення є найважливішими

Послідовні GUID за своєю природою можна здогадатися, тому не використовуйте їх у контекстах, чутливих до безпеки

Посилання:Вхід за гіперпосиланням видно.

База даних впорядкована за GUID

База даних SQL Server має такуNewSequentialId()для створення впорядкованого GUID. При створенні таблиці ви можете встановити її як значення за замовчуванням поля типу GUID і автоматично створювати значення первинного ключа при вставці нових даних (цю функцію можна використовувати лише як значення за замовчуванням поля, не викликається безпосередньо в SQL).

Приклад:

Функція NewSequentialId() може використовуватися лише в базах даних, хоча в документації Microsoft MSDN зазначено, що NEWSEQUENTIALID є обгорткою для функції Windows UuidCreateSequential.

Порада: не використовуйте цю функцію, якщо це питання конфіденційності. БоМожливо вгадати значення наступного згенерованого GUIDщоб отримати доступ до даних, пов'язаних із цим GUID.

Посилання:Вхід за гіперпосиланням видно.
Вхід за гіперпосиланням видно.

.NET створює впорядкований GUID

Функція UuidCreateSequential залежить від обчислювального апаратного забезпечення методуОстанні 12 біт насправді є MAC-адресою мережевої карти

Код виглядає так:

Результати такі:



Недолік:

  • Цей метод вимагає DllImport для виклику бібліотеки Windows, тому він не є кросплатформенним.
  • Він не може використовуватися в кластеризованому середовищі, де кілька машин записують інформацію в одну базу, оскільки отримані GUID будуть відрізнятися один від одного (функціонально-залежне обчислювальне обладнання), що призводить до фрагментації індексів.
  • Якщо ваш сервер Windows перезапускається, GUID може починатися з нижчого діапазону, що призведе до фрагментації індексу.

Посилання:

Вхід за гіперпосиланням видно.
Вхід за гіперпосиланням видно.

Якщо ви використовуєте .NET-програму для створення GUID у порядку SQL SERVER, рекомендується використовувати бібліотеку класів сторонніх сторін: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 мс, а ординарний GUID — 135134 мс. Заповненість складських місць така:

Незамовлений GUID: 36.547 MB
Замовлено GUID: 26.609 MB



Посилання:Вхід за гіперпосиланням видно.


(Кінець)




Попередній:Багатомовні ресурси для читання та запису (.resx) для .NET Core програми
Наступний:.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 |
MySQL генерує впорядкований GUID:Вхід за гіперпосиланням видно.



Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com