PostgreSql表中UUID,CHAR和VARCHAR之间的性能差异?

时间:2015-08-24 18:23:16

标签: sql postgresql database-performance sqldatatypes

我将UUID v4值存储在PostgreSQL v9.4表的“id”列下。

当我创建表格时,无论是将“id”列定义为VARCHAR(36), CHAR(36)还是UUID数据类型,写入或读取性能是否存在差异?

谢谢!

3 个答案:

答案 0 :(得分:28)

使用uuid。 PostgreSQL有一个原生类型。

它将uuid内部存储为128位二进制字段。您的其他建议选项将其存储为十六进制,相比之下效率非常低。

不仅如此,还是:

  • uuid执行简单的按字节顺序排序。 textcharvarchar会考虑归类和区域设置,这对于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的显着差异。