3

アイテムリストのアイテムにリンクされた価格リストから最高価格を検索するために、この優れた、しかし動作が遅い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の価格が含まれます。このステートメントは本当に遅いです。db-serverは、検索するすべてのアイテムの価格表全体を検索するのではないかと心配しています。

itemnrを知っています。しかし、どういうわけか、対応するitemidを検索して、このitemidをサブクエリに「送信」できますか?したがって、サブクエリはこのアイテムの最高価格をすばやく見つけることができますか?または、私の問題に対する他の解決策はありますか?

助けてください。

4

1 に答える 1

1

pricelist列を選択していないため、不要なJOINをに戻しました。

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

いくつかのインデックスの調整が役立つ可能性があります。それに関する情報を提供したら、私はいくつかの提案をすることができます。

于 2012-11-01T14:26:19.700 に答える