J'ai trois modèles: Produit, Catégorie et Lieu. Le produit a beaucoup de relations avec la catégorie et le lieu. Je dois obtenir une liste de catégories avec au moins un produit correspondant à un lieu spécifique. Par exemple, je pourrais avoir besoin de toutes les catégories qui ont au moins un produit de Boston.est distincte une requête coûteuse en django?
J'ai 100 catégories, 500 places et 100 000 produits.
En sqlite avec des produits 10K, la requête prend ~ une seconde. En production, je vais utiliser postgresql.
J'utilise:
categories = Category.objects.distinct().filter(product__place__name="Boston")
Est-ce cette requête va être cher? Y a-t-il une meilleure façon de faire cela?
Ceci est le résultat de 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'}]
Merci
Le lien vers le mécanisme de mise en cache de Django est cassé, mais l'ajout d'un seul caractère est une modification trop petite. Il ne manque qu'un "e" final Il devrait être: http://docs.djangoproject.com/fr/dev/topics/cache – andrewsomething