GUID:varchar(36)与uniqueidentifier

时间:2010-08-19 23:19:51

标签: sql-server performance sql-server-2008 database-design guid

我正在使用将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 个答案:

答案 0 :(得分:13)

也许只有你可以从SELECT语句中“读取”它们的事实(尽管我认为这不是特别有用,因为你可以使用select中的函数来显示Uniqueidentifiers)。

如果表很大,每行节省20个字节是相当可观的。

答案 1 :(得分:4)

我会选择uniqueidentifier,原因很多,例如,

它将占用更少的空间;它是独一无二的,因此无法复制。这对于比较和特殊性能相关问题以及易于获得唯一默认值等更好。

我会使用uniqueidentifier,除非我因特殊原因需要使用varchar。

答案 2 :(得分:2)

如果您的数据库是Oracle,则旧版Oracle(9)中原始数据的索引性能比索引varchar(36)字段要差得多。幸运的是,这在Oracle 10和11中发生了变化。

答案 3 :(得分:1)

我相信在SQL Server 2000中添加了UNIQUEIDENTIFIER,因此该应用程序最初可能是为SQL Server 7编写的,它不支持它。但这只是猜测,当然......

答案 4 :(得分:0)

绝对不是,因为我确信您知道遗留数据库经常会遇到设计缺陷:P因为GUID是16个字节,所以在数据库中它可能占用16个字节。你将获得每个条目20个字节