조인쿼리에서의 테이블 순서 질문 드립니다 0 5 540

by hellodb [SQL Query] [2021.06.30 12:48:54]


안녕하세요 질문 좀 드리겠습니다

 

1. 조인쿼리에서 from 절의 테이블 순서는 어떻게 작성하는 것이 좋을까요?
이것과 관련하여 검색을 해보면 작은쪽 집합을 드라이빙 테이블로 두는 것이 좋고
그러기 위해서 from 절 처음에 해당 테이블을 기술하는 것이 좋다 라는 글을 봤는데
이것은 RBO 일때 해당하는 내용인가요? 이제는 적용되지 않는 개념인지 궁금합니다

2. 요즘 보통 사용하는 옵티마이저는 CBO 이고 CBO 를 사용하는 환경에서 드라이빙 테이블을 사용자가 직접 결정하려면
LEADING 같은 힌트를 따로 주어야 하는 것 같은데 그렇다면 from 절에 기술된 테이블들의 순서는 의미가 없지 않을까요?
아니면 CBO 라고 하더라도 옵티마이저가 최선의 선택을 할때 고려의 대상이 되기때문에 의미가 있는 것일까요

3. 개인적으로 쿼리를 작성할때 집합의 크기를 고려하지는 않고
표시되어야 하는 컬럼이 많은 쪽의 테이블을 기준 테이블로 두고 나머지 필요한 테이블들을 붙여 나가는 식으로 작성을 합니다
반대로 작성을 하게 되면 아우터 조인을 하게 될 때 left 가 아니라 right 를 쓰게 되는 상황이 생길 것 같은데
right 를 쓰는 경우를 거의 본 적이 없기도 하고
이게 쿼리를 이해하거나 보기에 편해서 주로 이런식으로 작성을 하게 되는데 좋은 방법인지, 다른 분들은 어떻게 하시는지 궁금합니다

4. 기본적으로 쿼리 작성은 3번처럼 표시되어야 하는 컬럼이 많은 쪽의 테이블을 기준 테이블로 두고 
나머지 필요한 테이블들을 붙여 나가는 식으로 작성하고
여기에서 추가적으로 튜닝이 필요할 경우 쿼리 골격은 유지하고 인덱스 통해 드라이빙 테이블을 변경한다던지 하는 방법으로
할 것 같다는 생각이 드는데 맞는건지 내공이 부족하여 잘 모르겠습니다

감사합니다

by 우리집아찌 [2021.06.30 16:34:50]

 핸드폰에거 쓰다 다 날렸네요 ㅜㅜ

첫번째 저의 경험으로는 from절 테이블 순서는 의미 없습니다. 테스트 하고 싶으시면 rule 이라는 힌트 있습니다

둘째 테이블 순서보다 통계정보 수집이 훨 중요합니다 옵티마이버가 알아서 합니다

셋째 컬럼 갯수가 아니라 일반적으로 테이블 로우수/인덱스여부가 중요하며, 보통 테이블 구조가 마스터-디테일 구조면 마스터 테이블이 기준이 되야죠 outer 조인은 left/right  기준으로 테이블이 먼저 조인(드라이빙) 됩니다

넷째 튜닝은 인덱스를 추가 할수도 sql을 수정할수도 태이블을 수정할수도 dbms 파라미터를 수정할수도 있습니다 경험을 쌓아서 최적화 시키시면 됩니다

핸드폰이라 힘드네요


by 우리집아찌 [2021.06.30 16:35:15]

문맥 이상한거 수정했어요


by hellodb [2021.07.01 01:31:45]

감사합니다^^


by 마농 [2021.07.01 08:02:34]

FROM 절의 테이블 순서는 의미 없습니다.
다만 의미를 부여해서 작성 할 수는 있습니다.
기준이 되는 테이블을 먼저 쓰고, 부가적인 테이블들을 붙여 나가는 식이 되겠네요.
right 보다는 left 를 주로 사용합니다.
다만 아우터 조인이 필요한지 의문을 가지고 쿼리를 작성해야 합니다.
이너조인이 필요한 곳에 아우터 조인을 습관적으로 하는 분들 꽤 많습니다. 안좋은 습관입니다.
이너조인을 기본으로 생각하고 꼭 필요할 때만 아우터 조인을 한다고 생각하셔야 합니다.


by 축구쟁이 [2021.07.28 10:58:52]

3번 질문에 대해 추가적인 답변을 드리면

outer join은 inner join과 다르게 기준이 되는 테이블(드라이빙 테이블)의 데이터 전체가 조회됩니다.

따라서 무엇을 기준 테이블로 설정하냐에 따라 결과 자체가 달라집니다. 

그래서 outer join을 사용할때는 컬럼 개수에 따라 기준 테이블을 설정하는 것이 아니라

조회하려는 데이터 유형에 따라 정해야 하며

outer join을 사용한다면 left든 right든 위치만 반전될 뿐 성능이나 결과가 동일합니다.

따라서 left, right 둘 중에는 선호도에 따라 사용하면 되겠습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입