通过两个联接优化Django Query

时间:2018-10-18 22:48:37

标签: python django django-models

我有一个隐含三个表的查询:

hotels = models.Hotel.objects.filter(
    contracts__rate_tables__start_date__lte=check_in,
    contracts__rate_tables__due_date__gte=check_in,
).distinct()

contractsrates_tables是嵌套的查找字段。

随着数据库的增长,查询变得越来越慢,所以我尝试使用索引

indexes = [models.Index(
    fields=['id', 'contracts__id', 'contracts__rates_tables']
)]

但是我发现使用不同表中的列是不可能的。

这是结果查询:

SELECT DISTINCT "ReservationsManagerApp_hotel"."id",
"ReservationsManagerApp_hotel"."company_id", 
"ReservationsManagerApp_hotel"."name", 
"ReservationsManagerApp_hotel"."zone_id",
"ReservationsManagerApp_hotel"."category_id",
"ReservationsManagerApp_hotel"."capacity",
"ReservationsManagerApp_hotel"."position",
"ReservationsManagerApp_hotel"."in_pickup",
"ReservationsManagerApp_hotel"."is_active",
"ReservationsManagerApp_hotel"."latitude",
"ReservationsManagerApp_hotel"."longitude",
"ReservationsManagerApp_hotel"."iframe", 
"ReservationsManagerApp_hotel"."logo",
"ReservationsManagerApp_hotel"."adults_only",
"ReservationsManagerApp_hotel"."minimum_age",
"ReservationsManagerApp_hotel"."handle_fee",
"ReservationsManagerApp_hotel"."user_id",
"ReservationsManagerApp_hotel"."timestamp" 
FROM "ReservationsManagerApp_hotel" 
INNER JOIN "RatesManagerApp_contract" 
ON ("ReservationsManagerApp_hotel"."id" = "RatesManagerApp_contract"."hotel_id")
INNER JOIN "RatesManagerApp_ratestable" 
ON ("RatesManagerApp_contract"."id" = "RatesManagerApp_ratestable"."contract_id")
WHERE ("RatesManagerApp_ratestable"."due_date" >= 2018-09-14 AND
"RatesManagerApp_ratestable"."start_date" <= 2018-09-14)

优化此查询的最佳选择是什么?

0 个答案:

没有答案
相关问题