Преимущества для поля Guid по сравнению с nvarchar, содержащего Guid?

#c# #sql-server #uniqueidentifier

#c# #sql-сервер #уникальный идентификатор

Вопрос:

Я хочу знать, каковы характеристики a UniqueIdentifier column в Db

Над столбцом nvarchar(32), который содержит строку being sent from c# Guid.

Комментарии:

1. @marc_s , я хотел nvarchar, так как подумал: «Мне не нужны все эти 32 символа, я думаю, что 8 символов guid достаточно, чтобы быть уникальными …» — поэтому я вырезал 8 символов из 32 символов guid. , Но, вероятно, оно не будет таким уникальным…

2. Идентификатор guid (uniqueidentifier) не сохраняется в виде текста; вы просто видите это в своих инструментах (так же, как даты не являются текстом)

3. Вам действительно нужно учитывать соображения о производительности типов данных Мишель Уффорд — она четко объясняет, ПОЧЕМУ крайне важно выбрать правильный (наиболее подходящий) тип данных для ваших столбцов данных

4. Каждый отдельный байт GUID представлен двумя шестнадцатеричными символами (0-9, A-F); один байт может варьироваться от 0 до 255 — эти значения представлены в строковой форме, например 00 , через FF —> для представления одного (двоичного) байта необходимы два символа

5. @marc_s Как всегда, спасибо за вашу помощь и внимание.

Ответ №1:

С точки зрения сервера:

  • Я бы ожидал Guid , что поле будет храниться более эффективно — ему нужно всего 8 байт, а не 32 или, возможно, 64 , в зависимости от того, как именно хранится nvarchar
  • Сервер может обрабатывать его как непрозрачные двоичные данные — например, при проведении сравнений не требуется никаких интеллектуальных данных. Нет чувствительности к культуре или регистру. Это принципиально не текстовые данные, поэтому не имеет всех проблем и сложностей, связанных с текстом.
  • Сервер может решить использовать известную структуру Guid для более эффективного индексирования. Например, если некоторые биты с большей вероятностью будут распределены случайным образом, чем другие, их можно использовать для индексации.

С точки зрения программиста:

  • Это дает более четкое представление об ожидаемых данных.
  • Вам не нужна никакая проверка, и у вас никогда не будет никаких проблем с недопустимыми данными — это просто идентификаторы GUID.

Я большой поклонник хранения данных в любой форме, наиболее близкой к логическому значению данных. Например, если вы собираетесь хранить данные даты и времени, Это значительно упрощает процесс сравнения и т. Д., Если у вас есть значение даты / времени, а не строка. Преобразования в строку и из строки (или любого другого представления, но обычно это строка) должны выполняться только там, где это необходимо.