我创建了这个很好但运行缓慢的 SQL 语句来从链接到项目列表中的项目的价目表中搜索最高价格。已知的是项目itemnr:
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 个价格。这个语句真的很慢。我担心数据库服务器会为我搜索的每件商品搜索整个价目表。
我知道项目编号。但是我能否以某种方式搜索相应的 itemid 并将该 itemid“发送”到子查询?所以子查询可以快速找到这个商品的最高价???或者我的问题还有其他解决方案吗?
请帮忙。
最佳答案
我已将不需要的 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
一些索引调整可能会有所帮助,一旦您提供了一些相关信息,我就可以提出一些建议。
关于sql - 如何加速 "max()-searching"SQL 子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13179025/