需要关于数据库查询优化的小建议
Need a small advice on the DB query optimization
问题是关于代码优化,确切地说是-DB查询优化:
…
…
…
filter1 = Comment.objects.filter(foreignkey_to_model1__author=self.request.user,
is_active=True)
filter2 = Comment.objects.filter(foreignkey_to_model2__author=self.request.user,
is_active=True)
context["comments_by_user"] = filter1.union(filter2)[: 5]
return context
我觉得这段代码很糟糕,因为它由 2 个查询 + 切片而不是数据库级别的过滤器组成。
问题——是否有机会将它很好地打包在 1 个查询中以减少数据库的负载? (并让这段代码不那么糟糕……)
谢谢
试试这个:
from django.db.models import Q
filter = Comment.objects.filter(
Q(foreignkey_to_model1__author=self.request.user) |
Q(foreignkey_to_model2__author=self.request.user),
is_active=True
)[:5]
问题是关于代码优化,确切地说是-DB查询优化:
…
…
…
filter1 = Comment.objects.filter(foreignkey_to_model1__author=self.request.user,
is_active=True)
filter2 = Comment.objects.filter(foreignkey_to_model2__author=self.request.user,
is_active=True)
context["comments_by_user"] = filter1.union(filter2)[: 5]
return context
我觉得这段代码很糟糕,因为它由 2 个查询 + 切片而不是数据库级别的过滤器组成。 问题——是否有机会将它很好地打包在 1 个查询中以减少数据库的负载? (并让这段代码不那么糟糕……) 谢谢
试试这个:
from django.db.models import Q
filter = Comment.objects.filter(
Q(foreignkey_to_model1__author=self.request.user) |
Q(foreignkey_to_model2__author=self.request.user),
is_active=True
)[:5]