GUID: varchar (36) против уникального идентификатора - PullRequest
15 голосов
/ 20 августа 2010

Я работаю с устаревшей базой данных, в которой значения 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?

Ответы [ 5 ]

13 голосов
/ 20 августа 2010

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

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

4 голосов
/ 20 августа 2010

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

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

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

2 голосов
/ 09 сентября 2010

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

1 голос
/ 20 августа 2010

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

0 голосов
/ 20 августа 2010

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

...