Чрезвычайно медленный поиск в Django с использованием mysql в качестве внутренней базы данных - PullRequest
0 голосов
/ 08 ноября 2019

В моем представлении есть панель поиска, которая выполняет поиск крайне медленно. Есть четыре таблицы, которые я пытаюсь получить из Ресторанов, Еды, Меню, Качества.

Представление отправило ПК за едой. У меня также есть переменная local_zip и radius, чтобы найти ресторан рядом с пользователем. Я использую это, чтобы ограничить количество ресторанов. Затем я фильтрую объекты по выбранной еде и ресторанам рядом с ними. Затем я получаю некоторую качественную информацию о ресторанах.

Когда я запускаю его в оболочке, это на самом деле нормальная скорость. Ни одна строка не занимает слишком много времени, не знаю, почему это так медленно на сервере. Что очень медленно, так это отображение данных в оболочке. Например, если я просто попробую запустить «таблицу». Отображение данных занимает много времени.

Вот код, который работает очень медленно:

local_zip = request.session['local_zip']
radius = request.session['radius']
in_radius = [z.zip for z in zcdb.get_zipcodes_around_radius(local_zip, radius)]
list_ids = ['13', '427', '428'] #('ZIP', radius in miles)
# Restaurants table has about 500 observations
find_objects = Restaurants.objects.filter(Q(zipcode__in=in_radius) | Q(id__in=list_ids)).distinct()
# Menu table is large with about a million observation
objects_selected = Food.objects.filter(menu__menuid=pk)
table = objects_selected.filter(restaurants__in=find_objects).order_by('price').prefetch_related('restaurants')
#Food table has 10k objects
food_info = Food.objects.filter(foodid=pk)
# quality has about 600K objects
quality_info = Quality.objects.filter(food__foodid=pk,locality = str(5))[:1]
...