Как улучшить огромный запрос Django "многие-ко-многим" для повышения скорости работы Django?
У меня есть такой набор запросов, который мне нужно оптимизировать, потому что я думаю, что этот набор запросов замедляет производительность сайта. Поле user_wishlist является реляционной связью БД "многие-ко-многим" с моделью/таблицей Account. Как мне это сделать?
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
Когда я включаю лог с целью DEBUG в 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)
Что-то вроде этого должно сработать для вас.