我已经创建了这个好但运作缓慢的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“发送”到子查询?那么子查询可以快速找到这个项目的最高价格???或者我的问题还有其他解决方案吗?
请帮助。
答案 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
一些索引调整可能会有所帮助,一旦你提供了一些信息,我就可以提出一些建议。