我将UUID v4值存储在PostgreSQL v9.4表的“id”列下。
当我创建表格时,无论是将“id”列定义为VARCHAR(36), CHAR(36)还是UUID数据类型,写入或读取性能是否存在差异?
谢谢!
答案 0 :(得分:28)
使用uuid
。 PostgreSQL有一个原生类型。
它将uuid内部存储为128位二进制字段。您的其他建议选项将其存储为十六进制,相比之下效率非常低。
不仅如此,还是:
uuid
执行简单的按字节顺序排序。 text
,char
和varchar
会考虑归类和区域设置,这对于uuid来说是无意义的。
uuid
只有一个规范的陈述。文本等也是如此;你必须考虑大写和小写十六进制,是否存在{...-...}
等。
毫无疑问。使用uuid
。
唯一有意义的其他类型是bytea
,它至少可以直接用于存储uuid的16个字节。如果我使用的系统无法处理基本集之外的数据类型,就像我真正愚蠢的ORM那样,那就是我要做的事。
答案 1 :(得分:3)
UUID是最快的,因为它的128位 - > 16字节和比较以数字方式完成。
Char(36)和varchar(36)似乎相同且缓慢:http://www.depesz.com/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text/。
服务器应检查EOF以确定读取每个字符的值已完成的作业。
文本比较也比数字比较慢。由于UUID由16个字节组成,因此比较UUID比比较两个36个字符的文本要快得多。
使用本机UUID来提高性能。
答案 2 :(得分:0)
索引大小可能是最显着的差异:VARCHAR几乎增加86%。
从性能角度来看,我没有注意到PostgreSQL 9.5的显着差异。