2013-11-28 5 views
1

가입 할 수 있습니다. 이것은 동일한 ProductNum이있는 레코드를 의미합니다.최적화 SQL 선택 쿼리 내가 두 개의 테이블이

이 글은 아래의 문장으로 나에게 도움이된다. 그러나 큰 레코드 세트에 대해서는 CROSS JOIN이 최선의 방법이라고 생각하지 않는다. 웹 컨트롤에서 문을 사용하면 1000 개의 레코드만으로도 매우 느려집니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

SELECT  Shop_Products.*, Shop_Products_Egenskaber_Overruling.* 
FROM  Shop_Products CROSS JOIN 
      Shop_Products_Egenskaber_Overruling 
WHERE  Shop_Products.ProductNum = Shop_Products_Egenskaber_Overruling.ProductNum 

최적화 제안이 있으십니까?

감사합니다.

답변

2

실제로 당신은 내부 결합을 찾고 있습니다.

SELECT 
    SO.*, 
    SPEO.* 
FROM SHOP_PRODUCTS SP 
    INNER JOIN Shop_Products_Egenskaber_Overruling SPEO 
     ON SP.ProductNum = SPEO.ProductNum 

이 당신을 통해 성능을 개선 한 것이다 CROSS-가입 조건이 동일 ProductNum 레코드를 찾을 때문에 JOIN 상태에서 암시하고 WHERE 절은 제거됩니다.

WHERE 절은 항상 JOIN 후에 실행됩니다. 귀하의 경우, 모든 가능한 조합이 CROSS JOIN에 의해 ​​작성된 후 WHERE 절의 조건에 의해 필터링됩니다.

INNER JOIN을 사용하면 첫 번째 단계에서 필터링을 수행하고 있습니다.

+0

작동 솔루션 및 설명에 감사드립니다! 그것은 로딩 시간을 실제로 향상 시켰습니다 ... – micknt

+0

@micknt 당신은 천만에요. 보조 노트와 마찬가지로 교차 결합은 항상 JOINS 용어로 마지막 옵션이어야합니다. –

3

당신은 그런 식으로 할 수 있지만 확인이 최적화를 보장합니다

SELECT  Shop_Products.*, Shop_Products_Egenskaber_Overruling.* 
FROM  Shop_Products 
INNER JOIN Shop_Products_Egenskaber_Overruling on Shop_Products.ProductNum = Shop_Products_Egenskaber_Overruling.ProductNum 
+0

감사합니다. 내부 참여가 해결책이었습니다! – micknt

0

INNER가

SELECT  Produkter.*, Egenskaber.* 
FROM  Shop_Products Produkter 
INNER JOIN Shop_Products_Egenskaber_Overruling Egenskaber ON Produkter.ProductNum=Egenskaber.ProductNum 

취기 namngav 아웬 민주 공화국 PA Norska ..

+0

감사합니다, 내부 조인이 해결책이었습니다! – micknt

1

크로스 가입 가입 사용해보십시오 모든 조합을 생성하기 때문에 속도가 느립니다. 따라서 더 나은 성능을 위해 INNER JOIN을 사용할 수 있습니다. 하지만 어쨌든이 쿼리의 실행 계획을 확인하는 것이 유용 할 것이라고 생각합니다. 오라클의 경우 어디에나 내부 조인 솔루션간에 차이가 없기 때문입니다. Inner join vs Where

+0

감사합니다. 내부 결합이 해결책이었습니다! – micknt