안녕하세요 질문 좀 드리겠습니다
1. 조인쿼리에서 from 절의 테이블 순서는 어떻게 작성하는 것이 좋을까요?
이것과 관련하여 검색을 해보면 작은쪽 집합을 드라이빙 테이블로 두는 것이 좋고
그러기 위해서 from 절 처음에 해당 테이블을 기술하는 것이 좋다 라는 글을 봤는데
이것은 RBO 일때 해당하는 내용인가요? 이제는 적용되지 않는 개념인지 궁금합니다
2. 요즘 보통 사용하는 옵티마이저는 CBO 이고 CBO 를 사용하는 환경에서 드라이빙 테이블을 사용자가 직접 결정하려면
LEADING 같은 힌트를 따로 주어야 하는 것 같은데 그렇다면 from 절에 기술된 테이블들의 순서는 의미가 없지 않을까요?
아니면 CBO 라고 하더라도 옵티마이저가 최선의 선택을 할때 고려의 대상이 되기때문에 의미가 있는 것일까요
3. 개인적으로 쿼리를 작성할때 집합의 크기를 고려하지는 않고
표시되어야 하는 컬럼이 많은 쪽의 테이블을 기준 테이블로 두고 나머지 필요한 테이블들을 붙여 나가는 식으로 작성을 합니다
반대로 작성을 하게 되면 아우터 조인을 하게 될 때 left 가 아니라 right 를 쓰게 되는 상황이 생길 것 같은데
right 를 쓰는 경우를 거의 본 적이 없기도 하고
이게 쿼리를 이해하거나 보기에 편해서 주로 이런식으로 작성을 하게 되는데 좋은 방법인지, 다른 분들은 어떻게 하시는지 궁금합니다
4. 기본적으로 쿼리 작성은 3번처럼 표시되어야 하는 컬럼이 많은 쪽의 테이블을 기준 테이블로 두고
나머지 필요한 테이블들을 붙여 나가는 식으로 작성하고
여기에서 추가적으로 튜닝이 필요할 경우 쿼리 골격은 유지하고 인덱스 통해 드라이빙 테이블을 변경한다던지 하는 방법으로
할 것 같다는 생각이 드는데 맞는건지 내공이 부족하여 잘 모르겠습니다
감사합니다
핸드폰에거 쓰다 다 날렸네요 ㅜㅜ
첫번째 저의 경험으로는 from절 테이블 순서는 의미 없습니다. 테스트 하고 싶으시면 rule 이라는 힌트 있습니다
둘째 테이블 순서보다 통계정보 수집이 훨 중요합니다 옵티마이버가 알아서 합니다
셋째 컬럼 갯수가 아니라 일반적으로 테이블 로우수/인덱스여부가 중요하며, 보통 테이블 구조가 마스터-디테일 구조면 마스터 테이블이 기준이 되야죠 outer 조인은 left/right 기준으로 테이블이 먼저 조인(드라이빙) 됩니다
넷째 튜닝은 인덱스를 추가 할수도 sql을 수정할수도 태이블을 수정할수도 dbms 파라미터를 수정할수도 있습니다 경험을 쌓아서 최적화 시키시면 됩니다
핸드폰이라 힘드네요
3번 질문에 대해 추가적인 답변을 드리면
outer join은 inner join과 다르게 기준이 되는 테이블(드라이빙 테이블)의 데이터 전체가 조회됩니다.
따라서 무엇을 기준 테이블로 설정하냐에 따라 결과 자체가 달라집니다.
그래서 outer join을 사용할때는 컬럼 개수에 따라 기준 테이블을 설정하는 것이 아니라
조회하려는 데이터 유형에 따라 정해야 하며
outer join을 사용한다면 left든 right든 위치만 반전될 뿐 성능이나 결과가 동일합니다.
따라서 left, right 둘 중에는 선호도에 따라 사용하면 되겠습니다.