У меня есть три модели: продукт, категория и место. Продукт имеет отношение ManyToMany к категории и месту. Мне нужно получить список категорий, по крайней мере, по продукту, соответствующему определенному месту. Например, мне может потребоваться получить все категории, в которых есть хотя бы один продукт из Бостона.- отличный дорогой запрос в django?
У меня есть 100 категорий, 500 мест и 100 000 изделий.
В sqlite с продуктами 10K запрос занимает ~ секунду. В производстве я буду использовать postgresql.
Я использую:
categories = Category.objects.distinct().filter(product__place__name="Boston")
ли этот запрос будет дорого? Есть ли лучший способ сделать это?
Это результат connection.queries
{'time': '0.929', 'sql': u'SELECT DISTINCT "catalog_category"."id", "catalog_category"."name" FROM "catalog_category" INNER JOIN "catalog_product_categories" ON ("catalog_category"."id" = "catalog_product_categories"."category_id") INNER JOIN "catalog_product" ON ("catalog_product_categories"."product_id" = "catalog_product"."id") INNER JOIN "catalog_product_places" ON ("catalog_product"."id" = "catalog_product_places"."product_id") INNER JOIN "catalog_place" ON ("catalog_product_places"."car_id" = "catalog_car"."id") WHERE "catalog_place"."name" = Boston ORDER BY "catalog_category"."name" ASC'}]
Благодаря
Ссылка на механизм кеширования Django нарушена, но только добавление одного символа слишком мало, видимо, редактирование. Это просто отсутствует трейлинг «e». Это должно быть: http://docs.djangoproject.com/en/dev/topics/cache – andrewsomething