Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 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