如何改进庞大的多对多Django查询以提高Django速度



我有一个这样的查询集,我需要优化,因为我认为这个查询集会降低网站性能。user_wishlist字段是与Account模型/表的多对多DB关系。我该怎么办?

product_wishlist_store_list = []  
non_paged_products = Product.objects.prefetch_related('user_wishlist').select_related('category').filter(is_available=True).order_by('created_date')
for product in non_paged_products.iterator():
# Get User Wishlist
try:
product_wishlist = product.user_wishlist.filter(id=request.user.id).exists()
if product_wishlist:
product_wishlist_store_list.append(product.id)
except ObjectDoesNotExist:
pass

因此,当我在Django中打开日志进行调试时,我看到有近千个(0.000(SELECT查询INNER JOIN。0.000是否意味着数据库没有命中?尽管如此,看到一千个这样的查询对我来说还是有点可怕——我觉得这段代码效率太低了。是吗?

为什么不在这里使用简单的ORM查询,并在最后列出值列表,这将大大减少代码和查询时间。

product_wishlist_store_list = Product.objects.filter(
is_available=True, 
user_wishlist__id=id=request.user.id
).order_by('created_date').distinct().values_list("id", flat=True)

这样的东西应该对你有用。

最新更新