PostgreSQL数组可以针对连接进行优化吗?

时间:2016-07-02 03:58:33

标签: arrays postgresql database-design referential-integrity postgresql-performance

如果数组元素是数据本身,我认为Postgres数组对性能有好处,例如标记

http://shon.github.io/2015/12/21/postgres_array_performance.html

如果我使用数组作为存储整数外键的方法怎么样?除非出现外键约束问题,建议使用整数数组存储外键吗?

应用应针对报告或分析进行优化。因此,如果应用程序最终将大部分时间加入阵列表,请说应用程序需要显示外键的标签/标题/名称,是否仍然可以使用数组存储外键?

与使用联结表相比,当数组较小时性能会更好吗?比如电影类型的复选框是整数?

如果数组是数千,如果不使用数组而只使用联结表,性能会更好吗?

1 个答案:

答案 0 :(得分:3)

不,将FK存储在数组中对于通用表来说绝不是一个好主意。首先,你传递的事实是:数组元素的外键约束尚未实现(尚未实现)。仅这一点就应该使这个想法无效。

尝试实施Postgres 9.3的功能,该功能因严重的性能问题而停止。 See this thread on pgsql-hackers.

此外,虽然对于某些用例,使用数组可以提高读取性能,但写入性能会急剧下降。想一想:要插入,更新或删除长数组中的单个元素,您现在必须为每个canged元素编写一个包含整个数组的新行版本。而且我也看到了严重的锁定争用。

如果您的表格是 只读 ,那么这个想法就会变得更有意义。但是,我会考虑在规范化的多对多实现的顶部上使用非规范化数组materialized view

在使用MV时,MV可以包含所有连接表并生成一个平面表,以获得更好的读取性能(对于典型用例)。通过这种方式,您可以获得参考完整性良好的读取(和写入)性能 - 代价是管理MV的开销和额外存储。