2017-06-15 41 views
1

新(ISH)到Postgres的,试图提高查询性能:性能平均/组由[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有单独的索引。

这可以优化吗?

非常感谢!

+1

https://wiki.postgresql.org/wiki/Slow_Query_Questions –

+0

“我需要更快地做到这一点,所以我可以城市之间进行切换。” - 你也可以按城市选择和分组。 –

回答

0

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

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

0

复合B树索引:

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