在Django模型中的布尔字段上添加索引是一种很好的做法

时间:2013-10-23 12:24:27

标签: django django-models django-orm

假设我们有布尔字段的模型:

class AModel(models.Model):
    flag = models.BoleanField()

有没有理由在这个字段上添加索引?

我认为这没有道理,因为搜索中会有微薄的利润(这只会分成两部分),但录音带来的开销很大。但我的同事认为不同。

这有什么经验法则吗?

1 个答案:

答案 0 :(得分:3)

这取决于。

如果您的数据主要包含一个或另一个布尔值(即,几乎所有内容均为FALSE),但通常只想查询与另一个布尔值匹配的值(即,仅查询TRUE值),则可以布尔值字段上的索引可能会对性能产生很大的影响:尤其是如果您强制索引首先存储TRUE值。

诀窍在于,字段(和索引)是选择性的,因为您可以丢弃大多数行,因此可以通过存储索引来使用索引来加快速度有用。

或者,您可以在另一个字段(可能也在查询)上有一个索引,该字段使用WHERE <boolean-field>子句存储真实值(或反之,反之亦然,取决于您的需求)。我还没有尝试过,但是我想让整个美元都相信Postgres能够正确使用此索引...