假设我有一个带有一些HStore列的Postgres数据库。它对性能有何影响?特别是如果在不检查HStore属性的情况下运行大多数查询,那么HStore属性是否会显着降低它的速度呢?
答案 0 :(得分:5)
在存储空间中,hstore
只是另一个可变长度字段,如bytea
或text
。它是TOAST
able用于外线存储,可压缩等等。
当您未访问hstore
列时,唯一需要考虑的是它为每行添加的额外大小,使扫描速度变慢。这可以通过PostgreSQL在TOAST表中存储更大的hstore
字段来缓解。
与text
或其他可变长度列一样,如果您update
行必须复制大列的内容,因为PostgreSQL's copy-on-write concurrency control。但是,如果在写入中没有修改列并且它已经存储在线外,那么PostgreSQL通常可以避免复制它,而只是复制对它的引用。
如果没有大量使用,通常使用hstore列对性能会产生很大影响。