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 байт за запись