Django MySQL加入以提高性能

时间:2014-12-30 09:14:13

标签: python mysql django performance django-queryset

我正在寻找医疗用品

我有10个区域,每个区域有10个桌子,每个桌子包含医疗诊所,还有10个桌子,每个桌子都包含这些诊所提供的医疗用品。

现在我在所有这些配药中搜索医疗用品

对于每个区域,我正在获取对象

  a_list = Washington_dispensaries.objects.all()

然后我正在搜索每个药房中是否有这个特定项目

if category:
    a_lists = []
    for dispensary in a_list:
        items = dispensary.washington_dispensaries_item_set.filter(item__product_type__name = category)

        if items:
            result_cat_items.append(items)
            a_lists.append(dispensary)
    a_list = a_lists

完成所有10个地区的查询需要15秒。

如果我用PHP编写代码,我会使用MySQL join来加快查询速度。现在我如何更快地查询。

1 个答案:

答案 0 :(得分:1)

您已经对item和product_type进行了两次连接。所以再做一次:不要单独购买药房,而是将其作为过滤器的一部分。如果没有看到你的模型,很难给出确切的语法,但是类似于:

DispensaryItem.objects.filter(dispensary__location='Washington', item__product_type__name=category)