gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 14:18:40 25 4
gpt4 key购买 nike

我发现如果数组的元素是数据本身,例如标签,PostgreSQL 数组对性能有好处

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

如果我使用数组作为存储整数外键的方式怎么样?排除外键约束问题,用整数数组存储外键是否可取?

应用应针对报告或分析进行优化。因此,如果应用程序最终会在大多数情况下将数组连接到表中,比如说应用程序需要显示外键的标签/标题/名称,是否仍然可以使用数组来存储外键?

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

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

最佳答案

不,将 FK 存储在数组中对于通用表来说绝不是一个好主意。首先,您顺便提到了一个事实:未实现数组元素的外键约束(对于 Postgres 14 仍然如此)。仅此一项就应该使这个想法无效。

曾尝试实现 Postgres 9.3 的功能,但因严重的性能问题而停止。看这个thread on pgsql-hackers.

此外,虽然在某些用例中使用数组可以提高读取性能,但写入性能会直线下降。想一想:要从长数组中插入、更新或删除单个元素,您必须使用整个数组编写一个新的行版本。我也看到了严重的锁争用。

如果您的表只读,这个想法开始变得更有意义。但后来我会考虑 materialized view在规范化的多对多实现的之上使用非规范化数组。见:

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

关于arrays - PostgreSQL 数组可以针对连接进行优化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38156345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com