0

我对索引及其积极的一面有更深的理解。让我们假设这样的模型

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(速度)在这里真的很重要。对于如何改进此模型定义的任何建议,我将不胜感激。

4

0 回答 0