django - 在 Django 模型中的 bool 字段上添加索引是一个好习惯吗

标签 django django-models django-orm

假设我们有带有 bool 字段的模型:

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

是否有任何理由在该字段上添加索引?

我认为这没有理由,因为搜索的利润很小(这只是分成两个),但记录的开销很大。但我同事的想法不同。

这有什么经验法则吗?

最佳答案

这取决于。

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

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

或者,您可以在使用 WHERE <boolean-field> 的不同字段(也许您也在查询)上有一个索引。子句仅存储真实值(反之亦然,取决于您的需要)。我还没有尝试过,但我打赌 Postgres 能够正确使用这个索引......

关于django - 在 Django 模型中的 bool 字段上添加索引是一个好习惯吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19541598/

相关文章:

python - Django - 在特定数据库中创建对象

python - 将所有自定义验证放入模型中有什么问题?

python - Django泛型关系实践

python - 如何在 Django 中添加自定义内联管理小部件?

python - 如何使用 Django 管理员的 ContentTypes 在两个应用程序之间访问 ManyToManyField?

python - 如何从 Django 中的 QuerySet 获取倒数第二项?

python - Django ORM ExtractDay/ExtractHour/ExtractMinute

python - 使用 Q 对象过滤多个外键匹配

python - django - 无法使用同一用户多次保存模型

Django ModelChoiceField 下拉框自定义填充