Я работаю с устаревшей базой данных, в которой значения 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?
Возможно, только тот факт, что вы можете «читать» их из оператора SELECT (хотя я не думаю, что это особенно полезно, поскольку вы можете использовать функцию в select, чтобы отображать уникальные идентификаторы).
Если таблица большая, экономия 20 байт на строку значительна.
Я бы выбрал uniqueidentifier по многим причинам, например,
он займет меньше места; он уникален, поэтому его нельзя дублировать. Это намного лучше для сравнений и особенно проблем, связанных с производительностью, а также для простого получения уникального значения по умолчанию и т. Д.
Я бы использовал uniqueidentifier, если мне не нужно использовать varchar по очень конкретной причине.
Я полагаю, что UNIQUEIDENTIFIER
был добавлен в SQL Server 2000, поэтому вполне возможно, что это приложение изначально было написано для SQL Server 7, который его не поддерживал. Но это всего лишь предположение, конечно...
Абсолютно нет, так как я уверен, что вы знаете, что устаревшие базы данных часто страдают от недостатков проектирования :P Поскольку GUID составляет 16 байт, он также может занимать 16 байт в базе данных. Вы получите эти 20 байт на запись