【发布时间】:2015-04-26 16:10:38
【问题描述】:
我并不是要重新开始 UUID 与串行整数密钥的辩论。我知道任何一方都有有效的观点。我在几个表中使用 UUID 作为主键。
- 列类型:
"uuidKey" text NOT NULL - 索引:
CREATE UNIQUE INDEX grand_pkey ON grand USING btree ("uuidKey") - 主键约束:
ADD CONSTRAINT grand_pkey PRIMARY KEY ("uuidKey");
这是我的第一个问题;使用 PostgreSQL 9.4 将列类型设置为 UUID 是否有任何性能优势?
文档http://www.postgresql.org/docs/9.4/static/datatype-uuid.html 描述了UUID,但是除了类型安全之外,使用这种类型而不是text 类型还有什么好处吗?在字符类型文档中,它表明 char(n) 在 PostgreSQL 中不会比 text 有任何优势。
提示:这三种类型之间没有性能差异,除了 从使用空白填充类型时增加的存储空间,以及 几个额外的 CPU 周期来检查存储到 长度受限的列。虽然字符(n)有性能 在其他一些数据库系统中的优势,没有这样的优势 在 PostgreSQL 中;事实上 character(n) 通常是最慢的 三是因为其额外的存储成本。在大多数情况下,文本 或应改用字符变化。
我不担心磁盘空间,我只是想知道是否值得花时间对 UUID 和文本列类型进行基准测试?
第二个问题,哈希与 b-tree 索引。对 UUID 键进行排序没有意义,那么 b-tree 是否比散列索引有任何其他优势?
【问题讨论】:
-
如果除了主键之外还创建唯一索引,则没有必要。当您设置主键时,会在该键上创建唯一索引。
-
我可能以错误的顺序显示它。索引是由主键约束自动创建的。
-
似乎,根据文档(在此评论时 9.4 是最新的稳定版本),不鼓励使用哈希索引:postgresql.org/docs/9.4/static/indexes-types.html
-
也许我对这篇文章有误解,但是当 Postgres 具有本机 UUID 列类型时,为什么要使用 TEXT 呢? TEXT 有什么好处吗?
-
在 9.0 中添加了 UUID 列类型。该数据库最早创建于 8 年
标签: postgresql indexing hash uuid