Какой самый эффективный тип столбца UUID

Для хранения 128-битного UUID существует несколько вариантов хранения:

  1. столбца [16] столбца
  2. два столбца bigint /long (64 бит)
  3. столбец CHAR (36) - 32 шестнадцатеричных цифры + 4 тире.
  4. конкретный столбец базы данных UUID, если db поддерживает его

С точки зрения индексации, какая из них наиболее эффективна? Если db не поддерживает выделенный тип uuid, который из 1, 2, 3 является лучшим кандидатом?

10 голосов | спросил Vlad Mihalcea 28 J0000006Europe/Moscow 2014, 13:46:02

3 ответа


10

Специальный тип uuid - ваш лучший выбор для PostgreSQL. Трудно сказать с другими БД - для кого-то невозможно исключить тип uuid, который хранится менее эффективно, чем простой тип байта.

Снова в PostgreSQL bytea будет разумным способом хранения UUID, если у вас не было uuid. Для других БД это зависит от того, как они хранят двоичные данные.

По возможности я бы не стал использовать hex-with-dashes. Это менее эффективно сравнивать, сортировать и хранить.

Итак, действительно, «не (2) или (3)». Когда-либо. Используйте (4), где поддерживается, (1) в противном случае.

ответил Craig Ringer 28 J0000006Europe/Moscow 2014, 15:25:39
3

В порядке предпочтения: 4,1,2,3 Не используйте UUID в качестве ключа кластеризации при использовании SQL-сервера, так как он не только сильно фрагментируется, но и кластеризованный ключ используется во всех некластеризованных индексах, и вы добавляете эти байты в каждую строку индекса. Фрагментация может быть уменьшена с помощью NEWSEQUENTIALID, но обычно предпочитает идентификатор бингонга для вашего ключа кластеризации по GUID для предотвращения раздувания в других индексах.

Разница между выбором 1 над 2 будет зависеть от того, насколько эффективнее база данных обрабатывает два столбца базовых типов по одному фиксированному массиву столбцов. Это должно быть достаточно легко проверить с помощью фиктивных данных. Посмотрите на скорость ваших запросов, а также на размер индексов и данных. Маленький + быстрый - лучший!

ответил GilesDMiddleton 28 J0000006Europe/Moscow 2014, 19:31:22
1

Можно было бы предположить, что любой ориентированный на носитель тип данных будет лучше оптимизирован в продукте, чем все, что может быть объединено в качестве клиента этого продукта. После этого все, что имеет наименьшее количество байтов, вы получите максимальные строки на странице.

ответил Michael Green 28 J0000006Europe/Moscow 2014, 17:28:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132