SQL: хранение идентификаторов guid

#sql-server #sql-server-2008

#sql-сервер #sql-server-2008

Вопрос:

Теперь у меня есть требование, чтобы в таблицу, содержащую уникальный идентификатор (guid), был добавлен столбец. Этот идентификатор используется для сопоставления записей в разных таблицах и базах данных, но ограничений FK не будет. Было бы лучше сохранить guid как varchar(32) или как тип uniqueidentifier?

Будут выполняться соединения с использованием этого столбца, но не на регулярной основе. Этот идентификатор НЕ является PK. Я спрашиваю с точки зрения хранения и производительности.

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

1. Как ответил Джек, сохраните его как uniqueidentifier . Однако убедитесь, что кластеризованный индекс таблицы не основан на этом поле, поскольку это вызовет проблемы с производительностью при вставках.

2. это будет произвольный столбец, кластеризованный индекс не нужен.

Ответ №1:

Если это идентификатор GUID, сохраните его как uniqueidentifier

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

1. 1 Uniqueidentifier очень хорошо поддерживается SQL Server. Я не могу представить себе никакой причины сохранять идентификатор GUID не в поле uniqueidentifier.

2. Согласен. Если вы знаете, что это такое, нет необходимости хранить это как что-то другое.

3. 1 Делать что-то еще кажется таким же логичным, как хранить целые числа в виде строк

4. @Titan2782: для хранения a UNIQUEIDENTIFIER требуется 16 байт — для данных a VARCHAR(32) требуется 32 байта (которые на самом деле вообще не имеют переменной длины), и ему нужно где-то хранить фактическую длину, плюс, поскольку это поле переменной длины (в котором на самом деле нет необходимости), что также увеличит нагрузку на хранилище SQL Server. Таким образом, использование UNIQUEIDENTIFIER — это не только «естественный» выбор (хранить a GUID как a GUID ), но и более «экономичный» с точки зрения необходимого дискового пространства.