2013-04-17 6 views
0

3 개의 테이블 (T1, T2, T3)을 결합해야한다고 말하면 해당 테이블 각각에 30 개의 열과 수백만 개의 레코드가 있습니다. 관련 필드를 얻은 다음 결과에 참여하거나 3 개의 테이블을 조인 한 다음 관련 필드를 얻는 것이 더 빠릅니까?필드를 선택한 다음 OR 조인을 한 다음 필드를 선택 하시겠습니까?

내가 단순화 (A, B, C의 값을 가정은 고유) : 나는 그것을보고 의미처럼

(코드는 아마 보이지 않는 것하겠습니다 누군가가 해결할 수 있다면 나는 감사합니다 그것은)

옵션 1 :

SELECT 
    T1.a, 
    T2.c 
FROM 
    T1,T2,T3 
WHERE 
    T1.a = T2.b 
    AND T2.b = T3.c 

또는 옵션 2 :

SELECT 
    t_T1.a, 
    t_T2.c 
FROM 
    (SELECT a FROM T1) t_T1, 
    (SELECT b FROM T2) t_T2, 
    (SELECT c FROM T3) t_T3 
WHERE 
    t_T1.a = t_T2.b 
    AND t_T2.b = t_T3.c 

하십시오 assum 내가 작업하고있는 테이블에 매초 계산과 문제가있어 어리석은 예제처럼 보일지 모르지만 어느 것이 더 빠를 것인지 정말로 알아야합니다.

BTW, PLSQL 개발자 10.0.2와 함께 ORACLE을 사용합니다.

도움을 주셔서 감사합니다.

+0

마흐무드있는 간단한 표현을 위해 가고, 편집 주셔서 감사합니다. – Gal

답변

0

나는 SQL에서, 당신은 당신의 쿼리에 대한 가장 컴팩트 한 표현을 사용하려면, 옵션 1. 일반적으로

갈 것입니다. 이렇게하면 옵티마이 저가 쿼리를 재구성하는 데 "자유"를줍니다. 옵션 2는 대부분의 최적화 프로그램에서별로 문제가되지 않지만 극단적으로 생각하면 실제로 실행 한 것보다 다른 실행 경로를 선택할 수없는 경우가 있습니다.

David가 언급했듯이 실행 순서를 지정할 필요가 없습니다. 또 다른 이유는 마지막으로, 인간이 SQL을 유지할 수 있어야

옵션 1. 이동,이 경우에도 옵션 1.

0

그들은 아마도 동일한 최적화 된 쿼리로 해결되므로 아무런 차이가 없습니다.

SQL은 fourth generation language이므로 평가 순서를 강제로 수행하면 일반적으로 작동하지 않는다고 가정해야합니다.

+0

나는 투표를하고 싶었지만 분명히 그렇게하기 위해서는 15 가지 평판이 필요했다. – Gal