#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 байт — для данных aVARCHAR(32)
требуется 32 байта (которые на самом деле вообще не имеют переменной длины), и ему нужно где-то хранить фактическую длину, плюс, поскольку это поле переменной длины (в котором на самом деле нет необходимости), что также увеличит нагрузку на хранилище SQL Server. Таким образом, использованиеUNIQUEIDENTIFIER
— это не только «естественный» выбор (хранить aGUID
как aGUID
), но и более «экономичный» с точки зрения необходимого дискового пространства.