假设我们有一个带有布尔字段的模型:
class AModel(models.Model):
flag = models.BoleanField()
有什么理由在这个字段上添加索引吗?
我认为这没有理由,因为搜索中的利润很小(这只是分成两个),但记录的开销很大。但我的同事认为不同。
这有什么经验法则吗?
假设我们有一个带有布尔字段的模型:
class AModel(models.Model):
flag = models.BoleanField()
有什么理由在这个字段上添加索引吗?
我认为这没有理由,因为搜索中的利润很小(这只是分成两个),但记录的开销很大。但我的同事认为不同。
这有什么经验法则吗?
这取决于。
如果您的数据主要具有一个或其他布尔值(即,几乎所有内容都是 FALSE),但您希望通常只查询与另一个匹配的值(即,只查询 TRUE 值),那么在布尔字段可能会对性能产生很大影响:特别是如果您强制索引首先存储 TRUE 值。
诀窍在于字段(和索引)是有选择性的,因为您可以丢弃大部分行,因此可以使用索引通过存储有用的行来加快速度。
或者,您可以在不同的字段(也许您也在查询)上有一个索引,该索引使用一个WHERE <boolean-field>
子句来仅存储真实值(反之亦然,具体取决于您的需要)。我还没有尝试过,但我敢打赌 Postgres 能够正确使用这个索引......