모든 SELECT 쿼리는 위의 순서도를 따른다.
아래의 예시 쿼리문 두 개를 통해 WHERE구와 HAVING구가 각각 어느 시점에서 필터링을 하는지 확인해보았다.
(패드에 글씨 쓰는 게 아직 익숙치 않아 처참하게 널부러진 글씨들은 이해 바람.)
WHERE
HAVING
요약하자면 WHERE는 테이블을 선택한 후 바로 필터링 작업을 하는 반면
HAVING은 그룹핑까지 끝낸 후에 하나의 그룹을 제외하는 방식으로 필터링을 거친다는 것인데
둘 중 어느 방식이 효율적인가는 상황에 따라 다를 것 같다.
한 가지 알 수 있는 사실은 WHERE구로 필터링을 하면 WHERE의 필터링 과정에서 처리할 데이터가 많아지는 것이고,
HAVING구로 필터링을 하면 GROUP BY로 그룹핑하는 과정에서 처리할 데이터의 양이 늘어난다는 것이다.
실무에서는 시뮬레이션 과정을 거쳐 코스트가 더 적은 방법을 찾는다고 한다.
'IT > Database' 카테고리의 다른 글
[RDBMS] CASE 함수 (0) | 2021.10.06 |
---|---|
[RDBMS] IF 함수 및 함수 중첩(nest) (0) | 2021.10.06 |
MySQL Workbench Tips (Updating) (0) | 2021.10.05 |
[RDBMS] 문자열에 %가 포함되었을 때의 LIKE 검색 (0) | 2021.10.01 |
[RDBMS] 문자열 비교 연산에서 공백과 대소문자 구분 (0) | 2021.10.01 |