-
where절의 조건 순서에 따라 실행이 다를까?데이터베이스 2024. 4. 6. 10:41728x90
사용 가능한데 다만 속도는 많이 느려질 수 있어요
Betwwen이 range로 잡혀서 대상을 확 줄이고 like 처리 되거나, like 앞절로 대상을 확줄이고 between을 하거나 쿼리나 테이블 구조에 따라 적절하게 판단 하셔야 됩니다." where절에 between이랑 like 함수 같이 사용이 가능한가요?"
- IT관련 톡방에서 누군가 한 질문에 대한 답변이었다.
처음에는 이상했다. 뭐지? 인덱스 설계에따라 질의 속도가 달라지는거 아니었나 where절에 between 이 먼저와서 대상을 줄이고 like를 사용하면 빨라진다는 소린가? where절에 어떤 칼럼의 조건이 먼저 오는거에 따라 쿼리 속도가 달라질 수 있다는건가? 혼란이 왔다. where절의 순서에 따라 어떻게 되는지에 대해 생각은 안해보았던것 같다.
다른분들의 대답은 내가 생각한것과 비슷했다. 인덱스 키의 순서와 선행 키 컬럼에 선분조건을 사용했는지와 관계가 있다라고 답변했다.
그리고 데이터베이스의 where절의 조건 적용 순서는 옵티마이저 에 의해 변경 될 수 있다고 했다.옵티마이저가 항상 처리를 잘 해주는게 아닙니다. LIKE나 CAST CONVERT 같은 문자열 검색은 WHERE절 마지막에 놓는걸 추천 드립니다.
옵티마이저가 where절 적용 순서를 결정하기 때문에 인덱스 설계를 옵티마이저가 where절을 효율적으로 실행 할 수 있게 설계를 해야 된다는 말씀인것 같다. 그건 쿼리 실행계획을 확인하면 잘 알 수 있다.
근데 JOIN 쓸 때는 순서가 중요합니다. driving table과 scan 범위 문제가 있어서 그렇다.
Rule based냐 cost based냐 문제도 있고 index type에 따른 문제도 있습니다.https://velog.io/@kwontae1313/%EC%98%B5%ED%8B%B0%EB%A7%88%EC%9D%B4%EC%A0%80
해당 포스트에 옵티마이저와 내용이 잘 설명 되어 있다.
https://stylishc.tistory.com/39
https://www.alibabacloud.com/blog/the-principle-of-sql-optimizer_600233
728x90