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

时间:2015-04-14 11:42:39

标签: mysql sql

我有一个索引表,可以预订人们可以预订的行程和一张有这些行程价格的表格。

行程

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

价格

[tripid] [date] [duration] [price]

问题

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

SELECT t.*, 
(SELECT MIN(price) FROM prices WHERE tripid = t.tripid) 
FROM trips t;

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

1 个答案:

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