假设我有一个带有一些 HStore 列的 Postgres 数据库。它对性能有什么影响?特别是如果大多数查询在不检查 HStore 属性的情况下运行,那么存在 HStore 属性的事实是否会显着降低速度?
最佳答案
在存储方面,hstore
只是另一个可变长度字段,如 bytea
或 text
。这是TOAST
able用于线外存储、可压缩等。
当您不访问 hstore
列时,唯一的问题是它为每行添加的额外大小,从而使扫描速度变慢。 PostgreSQL 在 TOAST 表中离线存储更大的 hstore
字段可以缓解这种情况。
与 text
或其他可变长度列一样,如果您更新
行,则必须复制大列的内容,因为 PostgreSQL's copy-on-write concurrency control .然而,如果该列在写入时没有被修改并且它被离线存储,PostgreSQL 通常可以不复制它而只是复制对它的引用。
如果不经常使用 hstore 列,通常不会对性能产生太大影响。
关于performance - Postgres HStore 对性能的影响是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29063990/