我不想重新启动 UUID vs serial integer 键的辩论。我知道双方都有合理的观点。我在我的几个表中将 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 周期外,这三种类型之间没有性能差异。虽然在一些其他数据库系统中,character(n) 具有性能优势,但在 PostgreSQL 中并不存在这种优势;事实上,由于其额外的存储成本,character(n) 通常是三种类型中最慢的。在大多数情况下,应该使用 text 或 character varying。
我不担心磁盘空间,我只想知道是否值得花时间对比 UUID 和 text 列类型?
第二个问题,哈希 vs B 树索引。没有必要对 UUID 键进行排序,那么 B 树索引除了哈希索引之外还有其他优点吗?