首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSql表中UUID、CHAR和VARCHAR之间的性能差异?

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

Stack Overflow用户
提问于 2015-08-25 02:23:16
回答 3查看 15.1K关注 0票数 30

我将uuid值存储在PostgreSQL v9.4表中的"id“列下。

当我创建表时,无论我将"id“列定义为VARCHAR(36), CHAR(36)数据类型还是UUID数据类型,在后续的读写性能方面是否存在差异?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-25 09:47:07

使用uuid。PostgreSQL具有本机类型是有原因的。

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

不仅如此,而且:

  • uuid对排序执行简单的按字节排序。textcharvarchar考虑排序规则和区域设置,这对于uuid来说是毫无意义的。
  • uuid只有一种规范的重新表示。对于文本等情况则不是这样;您必须考虑大写与小写的十六进制,是否存在{...-...}s等。

这是毫无疑问的。使用uuid

唯一有意义的其他类型是bytea,它至少可以用来直接存储uuid的16个字节。如果我使用的系统不能处理基本集合之外的数据类型,比如某种非常愚蠢的ORM,我就会这么做。

票数 55
EN

Stack Overflow用户

发布于 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提高性能。

票数 5
EN

Stack Overflow用户

发布于 2017-02-02 22:50:48

索引大小可能是最显着的区别: VARCHAR的索引大小增加了近86%。

从性能的角度来看,我没有注意到PostgreSQL 9.5的显著差异。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32189129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档