GUID: varchar (36) по сравнению с uniqueidentifier

Я работаю с устаревшей базой данных, в которой хранятся значения GUID в виде типа данных varchar (36):

CREATE TABLE T_Rows (
    RowID    VARCHAR(36) NOT NULL PRIMARY KEY,
    RowValue INT         NOT NULL
) 

INSERT T_Rows (RowID, RowValue) VALUES (NEWID(), 1)

Я бы предположил, что сохранение GUID в качестве уникального идентификатора было бы предпочтительнее, так как это всего лишь 16 байт, а не 36.

Есть ли какие-либо преимущества для хранения GUID как varchar?

Ответы

Ответ 1

Возможно, только тот факт, что вы можете "читать" их из инструкции SELECT (хотя я не думаю, что это особенно полезно, поскольку вы можете использовать функцию в select для отображения Uniqueidentifiers).

Если таблица велика, экономия 20 байт на строку значительна.

Ответ 2

Я бы пошел с uniqueidentifier по многим причинам, таким как

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

Я бы использовал uniqueidentifier, если мне не нужно использовать varchar по очень конкретной причине.

Ответ 3

Если ваша база данных - это Oracle, тогда производительность индексов для необработанных данных в старой версии Oracle (9) была намного хуже, чем индексирование поля varchar (36). К счастью, это изменилось в Oracle 10 и 11.

Ответ 4

Я полагаю, что UNIQUEIDENTIFIER был добавлен в SQL Server 2000, поэтому возможно, что это приложение было первоначально написано для SQL Server 7, которое его не поддерживало. Но это просто предположение, конечно...

Ответ 5

Абсолютно нет, так как я уверен, что вы знаете, что устаревшие базы данных часто страдают от недостатков дизайна: P Поскольку GUID равен 16 байтам, он может также занять до 16 байт в базе данных. Вы получите 20 байт за запись