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?

16
задан 8kb 19 August 2010 в 23:19
поделиться

4 ответа

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

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

13
ответ дан 30 November 2019 в 22:09
поделиться

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

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

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

5
ответ дан 30 November 2019 в 22:09
поделиться

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

1
ответ дан 30 November 2019 в 22:09
поделиться

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

0
ответ дан 30 November 2019 в 22:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: