如何加速“max() - 搜索”SQL子查询

时间:2012-11-01 14:19:11

标签: sql subquery max

我已经创建了这个好但运作缓慢的SQL语句,以便从与项目列表中的项目链接的价目表中搜索最高价格。已知项目项目:

SELECT i.ItemNr, i.ItemId, x.maxprice
  FROM itemlist i,
       pricelist p,
       (SELECT MAX (p2.price) AS maxprice, p2.ItemId
          FROM pricelist p2
         GROUP BY p2.ItemId) x
 WHERE i.ItemNr = 4711
   AND i.ItemId = p.ItemId
   AND i.ItemId = x.ItemId
   AND p.price = x.maxprice

项目列表包含大约100000个项目,价目表大约1000000个价格。这句话真的很慢。我担心db-server会搜索我搜索的每个项目的整个价目表。

我知道itemnr。但我可以以某种方式搜索相应的itemid并将此itemid“发送”到子查询?那么子查询可以快速找到这个项目的最高价格???或者我的问题还有其他解决方案吗?

请帮助。

1 个答案:

答案 0 :(得分:1)

我已将不需要的JOIN移回pricelist,因为您没有从中选择任何列:

select i.ItemNr, i.ItemId, x.maxprice
from itemlist i
inner join (
    select MAX(price) as maxprice, ItemId
    from pricelist
    group by ItemId
    ) x on i.ItemId = x.ItemId
where i.ItemNr = 4711

一些索引调整可能会有所帮助,一旦你提供了一些信息,我就可以提出一些建议。