我将uuid值存储在PostgreSQL v9.4表中的"id“列下。
当我创建表时,无论我将"id“列定义为VARCHAR(36), CHAR(36)数据类型还是UUID数据类型,在后续的读写性能方面是否存在差异?
谢谢!
发布于 2015-08-25 09:47:07
使用uuid。PostgreSQL具有本机类型是有原因的。
它在内部将uuid存储为128位二进制字段。您提出的其他选项将其存储为十六进制,相比之下效率非常低。
不仅如此,而且:
uuid对排序执行简单的按字节排序。text、char和varchar考虑排序规则和区域设置,这对于uuid来说是毫无意义的。uuid只有一种规范的重新表示。对于文本等情况则不是这样;您必须考虑大写与小写的十六进制,是否存在{...-...}s等。这是毫无疑问的。使用uuid。
唯一有意义的其他类型是bytea,它至少可以用来直接存储uuid的16个字节。如果我使用的系统不能处理基本集合之外的数据类型,比如某种非常愚蠢的ORM,我就会这么做。
发布于 2015-08-25 03:03:57
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提高性能。
发布于 2017-02-02 22:50:48
索引大小可能是最显着的区别: VARCHAR的索引大小增加了近86%。
从性能的角度来看,我没有注意到PostgreSQL 9.5的显著差异。
https://stackoverflow.com/questions/32189129
复制相似问题