如果数组元素是数据本身,我认为Postgres数组对性能有好处,例如标记
http://shon.github.io/2015/12/21/postgres_array_performance.html
如果我使用数组作为存储整数外键的方法怎么样?除非出现外键约束问题,建议使用整数数组存储外键吗?
应用应针对报告或分析进行优化。因此,如果应用程序最终将大部分时间加入阵列表,请说应用程序需要显示外键的标签/标题/名称,是否仍然可以使用数组存储外键?
与使用联结表相比,当数组较小时性能会更好吗?比如电影类型的复选框是整数?
如果数组是数千,如果不使用数组而只使用联结表,性能会更好吗?
答案 0 :(得分:3)
不,将FK存储在数组中对于通用表来说绝不是一个好主意。首先,你传递的事实是:数组元素的外键约束尚未实现(尚未实现)。仅这一点就应该使这个想法无效。
尝试实施Postgres 9.3的功能,该功能因严重的性能问题而停止。 See this thread on pgsql-hackers.
此外,虽然对于某些用例,使用数组可以提高读取性能,但写入性能会急剧下降。想一想:要插入,更新或删除长数组中的单个元素,您现在必须为每个canged元素编写一个包含整个数组的新行版本。而且我也看到了严重的锁定争用。
如果您的表格是 只读 ,那么这个想法就会变得更有意义。但是,我会考虑在规范化的多对多实现的顶部上使用非规范化数组的materialized view:
在使用MV时,MV可以包含所有连接表并生成一个平面表,以获得更好的读取性能(对于典型用例)。通过这种方式,您可以获得参考完整性和良好的读取(和写入)性能 - 代价是管理MV的开销和额外存储。