Django Postgres阵列
我们正在使用模块在postgres中使用数组。我一直在做一些关于postgres数组的研究,一些开发人员说他们不建议使用存储超过X个值的postgres数组。有时候,这是十个,我听过多达三十个。在性能开始下降之前,对于一个数组中可以或应该存储多少个值,是否存在共识 作为参考,上述数据库主要为只读数据库 我们正试图决定应该在哪里使用中间表,以及应该在哪里使用postgres数组 还有一个相关问题:当针对表中的列创建索引时,该列存储数组值(比如bigint[])。我意识到存储在数组中的值不会被索引,而只是数组本身(我假设这类似于C指针)。与简单地使用中间表相比,这有多高效 我们可能需要针对这些值创建连接,或者在where子句中有一些特定的值,我担心一些性能可能会降低,因此在需要创建连接时,最好使用一个中间表 最后,考虑到我们使用的是dbarray,与简单地使用带有标准django-ORM的中间表相比,它的效率是多少(假设没有连接是上述问题中的where子句)Django Postgres阵列,django,postgresql,Django,Postgresql,我们正在使用模块在postgres中使用数组。我一直在做一些关于postgres数组的研究,一些开发人员说他们不建议使用存储超过X个值的postgres数组。有时候,这是十个,我听过多达三十个。在性能开始下降之前,对于一个数组中可以或应该存储多少个值,是否存在共识 作为参考,上述数据库主要为只读数据库 我们正试图决定应该在哪里使用中间表,以及应该在哪里使用postgres数组 还有一个相关问题:当针对表中的列创建索引时,该列存储数组值(比如bigint[])。我意识到存储在数组中的值不会被索引,
谢谢您
PostgreSQL
支持Intarray上的GIN
和GiST
索引,这允许您运行如下查询:
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
效率高
第一个查询很难使用规范化模式有效地重写。我是相信X永远不应该大于1的开发人员之一。数组和数据库通常是糟糕的mojo…它们不再是“自由文本”字段,这使得查询和排序的执行非常糟糕,特别是当您试图在数组中加入特定值时。如果您从未打算编写SQL,我想它可以用作基本数据存储。如果您想针对它编写SQL…我在这里看到的首选方法是将其移动到一个名称-值对表中,该表允许灵活地存储在表中的字段(所以中间表是这样)。