首页 > 解决方案 > 我应该在固定长度的 bytea PK 列上设置 STORAGE PLAIN 吗?

问题描述

我的 Postgres 表的主键是存储在bytea列中的 SHA1 校验和(总是 20 个字节)(因为 Postgres 没有固定长度的二进制类型)。

ALTER TABLE t ALTER COLUMN c SET STORAGE PLAIN为了查找和加入性能,我是否应该让 Postgres 压缩和/或外包(TOAST)我的 PK/FK?那么为何不)?

标签: postgresqlperformancejoinstorageprimary-key

解决方案


我会说这是一个微优化,可能不会产生可衡量的效果。

首先,PostgreSQL 仅在行超过 2000 字节时才考虑压缩和切片值,因此只有当您的行经常超过该大小时才会产生影响。

然后,即使主键列被烘烤,如果您在单个表扫描中选择大量行,您可能也只能测量差异。按索引仅获取几行不会有很大的不同。

我会对这两种方法进行基准测试,但我认为很难衡量差异。I/O 和其他成本可能会隐藏解压缩所需的少量额外 CPU 时间(请记住,首先要启动 TOAST 的行必须很大)。


推荐阅读