我有一个索引表,可以预订人们可以预订的行程和一张有这些行程价格的表格。
行程
[tripid] [city] [省] [国家] [文化] [性质] [评级]
价格
[tripid] [date] [duration] [price]
当用户搜索时,我想显示可用的最低价格。 我这样做是为了使用以下查询
SELECT t.*,
(SELECT MIN(price) FROM prices WHERE tripid = t.tripid)
FROM trips t;
但这很有效。 4000结果为5秒。 有没有更快的方法来实现这个目标?
答案 0 :(得分:6)
您的查询很好:
SELECT t.*,
(SELECT MIN(p.price) FROM prices p WHERE p.tripid = t.tripid)
FROM trips t;
您需要prices(tripid, price)
上的索引。这将提高绩效。
如果没有索引,预聚合可能会更快:
select t.*, minp
from trips t left join
(select p.tripid, min(p.price) as minp
from prices p
group by p.tripid
) p
on t.tripid = p.tripid;
这只需要扫描一次prices
表,而不是每次旅行一次。