我们正在使用 django-dbarray在 postgres 中使用数组的模块。我一直在做一些关于 postgres 数组的研究,一些开发人员说他们不建议使用存储超过 X 值的 postgres 数组。有时,这是十个,我听说有三十个之多。在性能开始下降之前,对于可以或应该在数组中存储多少值是否达成共识?
供引用,上面的DB主要是只读DB。
我们正在努力决定应该在哪里使用中间表以及应该在哪里使用 postgres 数组。
另一个相关问题:在针对表中的列创建索引时,该列存储数组值(比方说 bigint [])。我意识到存储在数组中的值不会被索引,而只会索引数组本身(我假设这类似于 C 指针)。与仅拥有一个中间表相比,这效率如何?
我们可能需要根据值创建连接或在 where 子句中包含一些特定值,我担心某些性能可能会降低,我们最好在需要创建时拥有一个中间表一个连接。
最后,考虑到我们使用的是 dbarray,与仅使用带有标准 django ORM 的中间表相比,它的效率如何(假设上述问题中的 where 子句没有连接)?
谢谢
最佳答案
PostgreSQL
支持 GIN
和 GiST
intarrays 索引,这允许您像这样运行查询:
SELECT *
FROM mytable
WHERE myarray @> ARRAY[1, 2]
-- returns arrays which contain 1 AND 2
或者这个:
SELECT *
FROM mytable
WHERE myarray && ARRAY[1, 2]
-- returns arrays which contain 1 OR 2
高效地。
第一个查询有点难以使用规范化模式有效地重写。
关于django - Postgres 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10703262/