【问题标题】:Indexing Django ArrayField or not?是否索引 Django ArrayField?
【发布时间】:2017-05-28 15:48:47
【问题描述】:

在 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 )

【问题讨论】:

  • 那么你的决定是什么?
  • 按照你的回答,我决定不搜索数组字段,所以我没有添加索引。我有点失望,使用数组字段不是一个好习惯,并且将来会避免使用它们,除非我绝对确定我不需要在它们中搜索。
  • 我很高兴能说服你这样做 :-)

标签: django postgresql


【解决方案1】:

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

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

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

如果是,第二个问题,“db_index = True”应该放在哪里? 因为上面的不敬。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-21
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    相关资源
    最近更新 更多