2012-11-01 4 views
3

itemlist에서 항목에 링크 된 pricelist에서 최고 가격을 검색하기 위해이 좋지만 느린 작업 SQL 문을 만들었습니다."max() - searching"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 

ITEMLIST 약 100,000 항목과 가격 목록에 대한 1000000 가격을 원하는 분야 알려진 항목 itemnr입니다. 이 진술은 정말 느립니다. DB 서버가 검색하는 모든 항목에 대해 전체 pricelist를 검색 할까 봐 걱정됩니다.

나는 itemnr을 알고있다. 하지만 어떻게 든 해당 itemid를 검색하고이 itemid를 하위 쿼리로 "보낼"수 있습니까? 그래서 서브 쿼리는이 항목의 가장 높은 가격을 빨리 찾을 수 있습니까 ??? 아니면 내 문제에 대한 다른 해결책이 있습니까?

도와주세요. 그것은 가능성이 일부 인덱스 개조하면 되겠 도움이 될 것입니다

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 

, 당신은 내가 만들 수에 대한 몇 가지 정보를 제공하면 :

+0

테이블에 어떤 색인이 있습니까? – wickedone

+0

어떤 종류의 SQL입니까? – podiluska

+0

'(price, ItemId) '에 대한 색인이 도움이 될 것입니다. –

답변

1

는 당신이 그것을에서 모든 열을 선택하지 않기 때문에 불필요한은, pricelist에 다시 가입 제거한 몇 가지 제안.

+0

안녕하세요 RedFilter, 훌륭한 솔루션입니다. 이제 진술은 정말 빠르게 달립니다. 정말 고마워!!! – wildewutz

관련 문제