2014-12-30 5 views
1

Я ищу ИМНДжанго MySQL Присоединяйтесь, чтобы повысить производительность

У меня есть 10 областей с 10 таблиц каждые из которых содержит медицинские диспансеров и более 10 таблиц с каждой таблицей, состоящей из медицинских изделий, имеющихся в этих диспансерах.

Теперь я ищу медицинский пункт среди все этого dispenaries

для каждой области, я получаю объекты

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 для ускорения запроса. Теперь как быстрее запросить запрос.

ответ

1

Вы уже делаете два соединения, в item и product_type. Так что просто сделайте еще одно: вместо того, чтобы получать диспансеры отдельно, сделайте это как часть фильтра. Трудно дать точный синтаксис, не видя ваши модели, но что-то вроде:

DispensaryItem.objects.filter(dispensary__location='Washington', item__product_type__name=category) 
Смежные вопросы