新的(ish)postgres,试图提高查询的性能:
SELECT avg(calendar.price)
FROM calendar
INNER JOIN listings ON calendar.listing_id = listings.id
WHERE listings.city = 'London'
GROUP BY calendar.date;
列表是~150k行,日历是~30万。查询需要20秒才能执行。
我在listing.id,listings.city,calendar.listing_id和calendar.date上有单独的索引。
这可以优化吗?
非常感谢!
答案 0 :(得分:0)
在calendar.city上添加索引,并确保listing_id和calendar.id是相同的数据类型。如果不是,请将它们转换为查询中的相同类型。
如果您执行查询说明并将查询计划程序的结果复制到https://explain.depesz.com/,您可以更好地了解瓶颈可能出现的位置。
答案 1 :(得分:0)
复合BTree索引:
listings: (city, id)
calendar: (listing_id, date, price)