postgresql - 我应该在固定长度的 bytea PK 列上设置 STORAGE PLAIN 吗?
问题描述
我的 Postgres 表的主键是存储在bytea
列中的 SHA1 校验和(总是 20 个字节)(因为 Postgres 没有固定长度的二进制类型)。
ALTER TABLE t ALTER COLUMN c SET STORAGE PLAIN
为了查找和加入性能,我是否应该让 Postgres 压缩和/或外包(TOAST)我的 PK/FK?那么为何不)?
解决方案
我会说这是一个微优化,可能不会产生可衡量的效果。
首先,PostgreSQL 仅在行超过 2000 字节时才考虑压缩和切片值,因此只有当您的行经常超过该大小时才会产生影响。
然后,即使主键列被烘烤,如果您在单个表扫描中选择大量行,您可能也只能测量差异。按索引仅获取几行不会有很大的不同。
我会对这两种方法进行基准测试,但我认为很难衡量差异。I/O 和其他成本可能会隐藏解压缩所需的少量额外 CPU 时间(请记住,首先要启动 TOAST 的行必须很大)。
推荐阅读
- php - 解析包含列名的数组并以相同顺序输出表的所有值
- python - 访问字典中的值忽略键的第二个值
- clojure - Leiningen 找不到 SDK
- asp.net - ExportToPdf 在 ASP.Net 中的一页中的每个 RadGrid 记录
- html - 过渡:1s 轻松;不使用背景颜色更改
- r - 如何删除R中的所有包
- javascript - Angular js:无法使用 $routeProvider 路由页面
- angular - 如何创建新部分,单击angular2中的新按钮
- python - 如何使用 python、cx_oracle 将查询的结果集作为字典获取?
- vba - VBA - 如何将不同的范围复制到新的工作表