2014-09-11 2 views
0

안녕하세요 왼쪽 joing에 추가 조건을 추가하면 성능이 향상 될지 궁금합니다. 예제 코드는 다음과 같습니다. 특정 쿠폰에 대한 가격 데이터 만 알고 있어야하지만 모든 쿠폰 데이터가 필요합니다. 성능을 높이기 위해 추가 조인 조건을 적용 할 가치가 있는지 궁금하십니까?addtional Left Table Filter로 왼쪽 결합 성능

SELECT 
    * 
FROM 
    OFFERS 
LEFT JOIN PRICE ON (
    PRICE.PH_SUBS_LINK_SK = ACTSUBS.PH_SUBS_LINK_SK and 
    PRICE.PRICE_END_DT= '09-09-9999' and 
    OFFERS.PERCENT_VALUE >0 and 
    OFFERS.VALUE_OR_PERCENT = 'PERCENT' and 
    OFFERS.PRODUCT_OFFER_TYPE = 'RC' and 
    OFFERS.OFFER_STATUS_CODE in ('ACT','PTM') 
    ) 
+0

이들은 조인 조건이 아니지만 필터 ... 데이터 필터링은 일반적으로 더 나은 성능을 제공하지만 인덱스, 파티션 등에 따라 달라집니다. –

+0

데이터 세트 크기 인덱스 및 다양한 다른 요인에 따라 달라질 수 있습니다. 성능에 영향을주는 것은'JOIN'과'WHO'의 사용 뿐만이 아닙니다. 첫째,'IN ('ACT', 'PTM')'은 종종 비효율적 일 수 있으며 종종'(columnName = ''OR columnName = '')처럼 빠릅니다. 또한 http://dba.stackexchange.com/에서 도움을 얻을 수도 있습니다. 물론 질문이 여기에 적용 가능하다고 생각 하긴하지만, 최적화에 대한 심도 깊은 지식을 가지고있을 수도 있습니다. – talegna

+0

또한 어떤 RDBMS를 사용하고 있는지에 따라 다릅니다. 실행 계획을 비교 했습니까? –

답변

0

나는이에 대한 코드 위에 변경하는 것이 좋습니다 :

SELECT 
    * 
FROM 
    OFFERS 
LEFT JOIN PRICE ON 
    PRICE.PH_SUBS_LINK_SK = ACTSUBS.PH_SUBS_LINK_SK 
WHERE PRICE.PRICE_END_DT= '09-09-9999' and 
    OFFERS.PERCENT_VALUE >0 and 
    OFFERS.VALUE_OR_PERCENT = 'PERCENT' and 
    OFFERS.PRODUCT_OFFER_TYPE = 'RC' and 
    OFFERS.OFFER_STATUS_CODE in ('ACT','PTM') 

하면 성능이 곳 명세서에 사용되는 필드에 대한 인덱스를 만들 개선하기 위해.

+0

이것은 외부 조인 가격 테이블의 필터 때문에 원래 쿼리와 동일하지 않습니다. 이제는 PRICE_END_DT = '09 -09-9999 '조건이 만족되지 않는 모든 행이 제거됩니다. 원래 쿼리는 일치하지 않는 가격 대신 null 행을 반환합니다. –