我对索引及其积极的一面有更深的理解。让我们假设这样的模型
class SupportTicket(models.Model):
content = models.TextField()
closed_at = models.DateTimeField(default=None)
为了保持干净,我不添加is_closed布尔字段,因为它是多余的(因为closed_at == None意味着票是开放的)。正如您所想象的那样,打开的门票将被更频繁地查找和调用,这就是为什么我想在数据库方面对其进行优化。我正在使用 postgres,我想要的效果是加速这个过滤器
active_tickets = SupportTicket.objects.filter(closed_at__isnull=True)
我知道 postgres 支持 DateTime 索引,但我没有知识,也没有空/非空加速的经验。我的猜测看起来像这样
class SupportTicket(models.Model):
class Meta:
indexes = [models.Index(
name='ticket_open_condition',
fields=['closed_at'],
condition=Q(closed_at__isnull=True))
]
content = models.TextField()
closed_at = models.DateTimeField(default=None)
但我不知道它是否会加快查询速度。db 每天会增长大约 200 个门票,每天会被查询大约 10 000 个。我知道这并不多,但 UX(速度)在这里真的很重要。对于如何改进此模型定义的任何建议,我将不胜感激。