如何优化此特定Queryset?

时间:2016-12-09 11:05:08

标签: django

在Django应用程序中,我有一组公司,其中包含过去已执行的操作历史记录。我使用以下令人讨厌的高昂Queryset检索这些事务:

class Company(AbstractBaseUser, PermissionsMixin):
    ...
    def get_transactions_history(self):
        return Transaction.objects.filter(sponsorship__campaign__shop__company=self)

显然,这会导致来自ORM的大量JOIN指令,并且由于Transactions的数量可能会迅速增加,因此,由于此Queryset,数据库的吞吐量也在爆炸。

假设TransactionCompany之间没有快捷方式,而不是通过上面公开的SponsorshipCampaignShop进行链接,您将如何优化没有触及数据库模式的Queryset?

2 个答案:

答案 0 :(得分:1)

我认为你真的不能,但你可以更聪明地使用它。

Theres cached_property

@cached_property
def history(self):

它的确如此。

否则,您需要将其拆分为拼接查询集的recent_history

.filter(...)[:10]

或分页

答案 1 :(得分:0)

如果你无法在SQL级别对它进行优化,那么显然你在ORM级别上做的事情并不多。