입양 시각 구하기(1)

정민교·2024년 3월 18일
0

SQL프로그래머스

목록 보기
21/25

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

포인트

  1. 성능?

문제는 간단하기 때문에 성능적으로 문제가 될 것 같은 포인트를 집어보자

  1. WHERE 절의 HOUR함수를 사용한 문제

이 문제는 DATETIME에 인덱스가 걸려있더라도 인덱스를 활용하지 못하고 WHERE절에 만족하는 레코드를 찾기 위해 풀스캔을 진행할 확률이 높다.

  1. HOUR 함수의 중복 사용

HOUR 함수를 중복해서 사용하여 불필요한 연산 횟수가 늘어난다.

해결

  1. CTE를 사용하여 HOUR 함수의 결과를 임시테이블로 생성하여 사용한다.

  2. HOUR에 해당하는 컬럼을 따로 만들어 인덱스를 생성한다.

profile
백엔드 개발자

0개의 댓글