我有一个索引表,有人可以预订的旅行和一张有这些旅行价格的桌子.
旅行
[tripid] [城市] [省] [国家] [文化] [性质] [评级]
价格
[tripid] [日期] [持续时间] [价格]
当用户搜索时我想显示可用的最低价格.我这样做是为了使用以下查询
SELECT t.*,
(SELECT MIN(price) FROM prices WHERE tripid = t.tripid)
FROM trips t;
Run Code Online (Sandbox Code Playgroud)
但这很有效.4000结果为5秒.有没有更快的方法来实现这一目标?
您的查询很好:
SELECT t.*,
(SELECT MIN(p.price) FROM prices p WHERE p.tripid = t.tripid)
FROM trips t;
Run Code Online (Sandbox Code Playgroud)
你需要一个索引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;
Run Code Online (Sandbox Code Playgroud)
这只需要扫描prices一次表,而不是每次旅行一次.