Django ArrayField是否需要进行索引?

5
在Postgres 9.6上使用Django 1.8。 我的一个模型有一个ArrayField:
packages = ArrayField( models.CharField( max_length = 200 ), blank = True )

第一个问题是我是否应该为它添加索引?文档说明:

目前使用db_index将创建一个B-tree索引。这对查询没有特别大的帮助。 更有用的索引是GIN索引,您应该使用RunSQL操作创建。

但这并不清楚我应该怎么做。

如果是,第二个问题是在哪里放置"db_index = True"?像这样吗?

packages = ArrayField( models.CharField( db_index = True, max_length = 200 ), blank = True )

1
那么你决定了什么? - e4c5
根据您的回答,我决定不搜索数组字段,因此我没有添加索引。我有点失望,使用数组字段不是一个好的做法,除非我绝对确定不需要在其中搜索,否则将来会避免使用它们。 - Robert Brax
我很高兴我能说服你做这件事 :-) - e4c5
1个回答

8
这是 Django 文档中的说法。这是 postgresql 文档 中的说法:

数组不是集合;搜索特定的数组元素可能是数据库设计不良的表现。考虑使用一个单独的表,其中每个项目都是数组元素的行。这将更容易搜索,并且对于大量元素来说,很可能会更好地扩展。

我应该给它添加索引吗? 这意味着您正在考虑搜索数组字段。Postgresql 建议您不要这样做。实际上,您不应该在单个列中存储数组或 CSV。您应该将表进行规范化。 如果是,第二个问题是,在哪里放置“db_index = True”? 由于上述原因,这个问题是无关紧要的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接