https://school.programmers.co.kr/learn/courses/30/lessons/59412
-- 코드를 입력하세요
SELECT
HOUR(DATETIME) AS HOUR,
COUNT(ANIMAL_ID) AS COUNT
FROM
ANIMAL_OUTS
WHERE
HOUR(DATETIME) >= 9
AND
HOUR(DATETIME) < 20
GROUP BY
HOUR(DATETIME)
ORDER BY
HOUR
문제는 간단하기 때문에 성능적으로 문제가 될 것 같은 포인트를 집어보자
이 문제는 DATETIME에 인덱스가 걸려있더라도 인덱스를 활용하지 못하고 WHERE절에 만족하는 레코드를 찾기 위해 풀스캔을 진행할 확률이 높다.
HOUR 함수를 중복해서 사용하여 불필요한 연산 횟수가 늘어난다.
해결
CTE를 사용하여 HOUR 함수의 결과를 임시테이블로 생성하여 사용한다.
HOUR에 해당하는 컬럼을 따로 만들어 인덱스를 생성한다.