【问题标题】:Shall I SET STORAGE PLAIN on fixed-length bytea PK column?我应该在固定长度的 bytea PK 列上设置 STORAGE PLAIN 吗?
【发布时间】:2020-10-19 15:56:35
【问题描述】:
我的 Postgres 表的主键是一个 SHA1 校验和(总是 20 字节),存储在 bytea 列中(因为 Postgres 没有固定长度的二进制类型)。
我是否应该 ALTER TABLE t ALTER COLUMN c SET STORAGE PLAIN 不让 Postgres 压缩和/或外包 (TOAST) 我的 PK/FK 以便查找和加入性能?为什么(不)?
【问题讨论】:
标签:
postgresql
performance
join
storage
primary-key
【解决方案1】:
我会说这是一种微优化,可能不会产生可衡量的效果。
首先,PostgreSQL 仅在行超过 2000 字节时才考虑压缩和切片值,因此只有当您的行经常超过该大小时才会产生影响。
然后,即使主键列被烘烤,您也可能只有在一次表扫描中选择大量行时才能衡量差异。按索引仅获取几行不会有很大的不同。
我会对这两种方法进行基准测试,但我认为很难衡量差异。 I/O 和其他成本可能会隐藏解压缩所需的少量额外 CPU 时间(请记住,首先要启动 TOAST 的行必须很大)。