在其他表中选择最低值的最快方法

NLA*_*nda 4 mysql sql

我有一个索引表,有人可以预订的旅行和一张有这些旅行价格的桌子.

旅行

[tripid] [城市] [省] [国家] [文化] [性质] [评级]

价格

[tripid] [日期] [持续时间] [价格]

问题

当用户搜索时我想显示可用的最低价格.我这样做是为了使用以下查询

SELECT t.*, 
(SELECT MIN(price) FROM prices WHERE tripid = t.tripid) 
FROM trips t;
Run Code Online (Sandbox Code Playgroud)

但这很有效.4000结果为5秒.有没有更快的方法来实现这一目标?

Gor*_*off 6

您的查询很好:

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一次表,而不是每次旅行一次.