[Postgres]的平均/分组表现

时间:2017-06-15 12:07:08

标签: sql database postgresql optimization

新的(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上有单独的索引。

这可以优化吗?

非常感谢!

2 个答案:

答案 0 :(得分:0)

在calendar.city上添加索引,并确保listing_id和calendar.id是相同的数据类型。如果不是,请将它们转换为查询中的相同类型。

如果您执行查询说明并将查询计划程序的结果复制到https://explain.depesz.com/,您可以更好地了解瓶颈可能出现的位置。

答案 1 :(得分:0)

复合BTree索引:

listings:  (city, id)
calendar:  (listing_id, date, price)