SELECT > FROM > JOIN ON > WHERE > GROUP BY > HAVING > ORDER BY > LIMIT
FROM > JOIN ON > WHERE > GROUP BY > HAVING > SELECT > DISTINCT > ORDER BY > OVER > LIMIT
실행 순서는 크게 3개로 분할해서 생각해볼 수 있다.
STEP 1. 테이블 인식 : FROM
STEP 2. 테이블 구조 : JOIN ON-WHERE-GROUP BY- HAVING (⭐중요)
STEP 3. 테이블 조회 : SELECT-DISTINCT-ORDER BY-LIMIT
테이블 구조 관련 절의 경우 연산량과 성능 관련하여 생각할 포인트가 많다.
⭐연산 후 추출하기 VS 추출하기 전 필요한 것만 연산 을 비교하여 생각하는 관점이 중요하다.
간단한 예를 들어 생각해보자
TABLE_A 에서 WHERE '날짜' = '2023-01-01'인 행을 대상으로 TABLE_B와 ID를 기준으로 JOIN할 때
SELECT ID, 날짜
FROM TABLE_A A
JOIN TAVLE_B B ON A.ID=B.ID
WHERE '날짜' = '2023-01-01'
만약 TABLE_A에 포함된 날짜범위가 2010~2023년이라고 가정했을 때 해당 쿼리는 작동은 하겠지만 필요한 컬럼 대비 연산량이 과도하게 많아진다는 문제가 있다.
(전체 테이블A에 대해 연산한뒤(JOIN) 조건에 맞는 것만 추출하는 WHERE절이 동작하기 때문)
따라서 경우에 따라 JOIN하기 전에 CTE처리를 하는 등 따로 테이블을 분리해서 처리하는 것을 고려할 필요가 있다.