索引Django ArrayField与否?

时间:2017-01-13 09:55:36

标签: django postgresql

在Postgres 9.6上使用Django 1.8。 我的一个模型有一个ArrayField:

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

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

  

目前使用db_index将创建一个btree索引。事实并非如此   为查询提供特别重要的帮助。一个更有用的索引   是一个GIN索引,您应该使用RunSQL操作创建。

但不清楚我应该怎么做。

如果是,第二个问题,就是放置" db_index = True" ? 像这样?:

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

1 个答案:

答案 0 :(得分:2)

这就是django docs所说的。这就是postgresql docs所说的

  

数组不是集合;搜索特定的数组元素可以是一个   数据库错误设计的标志。考虑使用带有行的单独表   对于每个将成为数组元素的项目。这会更容易   搜索,并且可能会针对大量元素进行更好的扩展。

我应该为它添加索引吗? 这意味着您正在考虑搜索数组字段。 Postgresql建议你不要。实际上,您不应该将数组或CSV存储在单个列中。你应该做的是规范你的表格。

如果是,第二个问题,是“db_index = True”的位置? 由于上述原因而不敬。