안녕하십니까
몇 가지 질문이 있어 글 올립니다.
1. Where절 실행순서
- SQL문을 작성하다보면 Where절에 조건들이 많이 붙게 되는데요
이때 조건별 실행순서가 어떻게 되나요?
제가 배우기로는 옵티마이저가 실행계획을 세운 후 실행순서에 따라 연산한다고 알고있거든요
그런데 밑에서 거꾸로부터 처리한다는 이야기도 있더라구요
명쾌한 답변 해주시면 감사하겠습니다.
2. Where 1=1
- 항상 참인 조건이죠
이것을 썼을때 쿼리가 빨라진다는 말이 있던데 사실인가요??
코드를 보다보니 많은 SQL에 붙어있더라구요.
동적쿼리에 사용하면 유용하다 이정도만 알고있습니다.
3. 옵티마이저 실행순서
- 한 SQL문의 실행순서를 보게되면
INDEX RANGE SCAN INDEX ...
TABLE ACCESS BY INDEX ROWID TABLE ...
FILTER
SORT AGGREGATE
SELECT STATEMENT ...
이런 식으로 되어있는데요
해당 구문들이 정확히 무슨 의미를 뜻하는지 모르겠습니다.
알려주시면 감사하겠습니다.
긴글 읽어주셔서 감사합니다.
많은 답변 부탁드립니다.
1. 실행 순서는 말씀 하신 것처럼 실행 계획으로 보시면 되고요,
읽는 방법은 아래서 위가 맞는데, 동급 레벨일 경우 위에서 먼저 읽습니다.
즉 파생되는 두가닥 줄기가 있을 때 위에 줄기의 맨 아래 부터 읽습니다.
실행 순서 읽는 방법은 인터넷에 검색하면 그림과 함께 설명이 있어 보다 이해하기 쉽울 것 같습니다.
2. 역시 말씀하신 것처럼 동적 조건 쿼리만을 위해 많이 기술하고 있는 것 같습니다.
그 외 별 의미 없습니다. 근데 어플에서 조건이 없을 경우 자동으로 where 조건절을 삭제하는 기능이 있는데도 많이 써서 처음 보는 사람들에게 혼란을 주는 것 같아 개인적으로 선호하는 코딩 방법은 아닙니다.
3. 실행 계획 해석 방법은 간단하게 설명 드릴 수 있는 내용이 아닙니다.
관련 강좌 및 문서를 많이 보셔야 합니다.
http://www.gurubee.net/article/5647
해당 URL에 실행계획 구문들의 의미가 잘 정리된 것 같아 댓글에 추가합니다.