如何应用索引进行搜索

时间:2017-06-14 15:13:50

标签: python django indexing django-models

DB中有很多对象,因此在Admin中搜索速度非常慢。 我定义了这些模型:

class Log(models.Model):
    message = models.TextField(blank=True, null=True)
    user = models.ForeignKey(AUTH_USER_MODEL, null=True, blank=True)

class LogEmail(models.Model):
    log = models.ForeignKey(Log)
    email = models.CharField(max_length=350, db_index=True)
    site = models.ForeignKey('sites.Site')

这是我的ModelAdmin:

class LogAdmin(admin.ModelAdmin):
    search_fields = ('logemail__email',)

所以,我在LogEmail中有电子邮件字段的索引,我猜我的FK索引是默认创建的。我怎样才能加速这件事呢?我尝试添加index_together,例如:

class LogEmail(models.Model):
    log = models.ForeignKey(Log)
    email = models.CharField(max_length=350, db_index=True)
    site = models.ForeignKey('sites.Site')

    class Meta:
        index_together = (
            ('log', 'email'),
        )

但我没有发现任何差异。

1 个答案:

答案 0 :(得分:0)

我注意到我的网站存在类似问题,我通过使用相关对象注释查询集来加快速度,以避免对每个对象进行查询。

JOIN

这会在查询中添加{{1}}子句,并有助于加快搜索速度。