241101 TIL SQL 날짜 필터링 하기

J_log·2024년 11월 1일
0

SQL 문제를 풀고 다른 분들의 풀이를 보다가 알게된 날짜 필터링
문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/144856

기존에 썼던 방식

where bs.SALES_DATE >= '2022-01-01' and bs.SALES_DATE < '2022-02-01'

또 다른 방식

WHERE YEAR(C.SALES_DATE) = 2022 AND MONTH(C.SALES_DATE) =1

뭔가 조금 더 직관적이고 깔끔하고 가독성도 좋은 것 같다.
근데 여기서 의문이 생겼다 두 쿼리문 모두 날짜를 필터링 하는 역할을 하지만 성능적으로 차이가 있을까?

  1. 첫 번째 방식 => bs.SALES_DATE >= '2022-01-01' and bs.SALES_DATE < '2022-02-01'
  • 이 방식은 날짜 필터링을 범위 조건으로 처리한다. 따라서 SALES_DATE에 인덱스가 있다면, DBMS는 해당 인덱스를 사용하여 범위 검색을 수행할 수 있다
  • 범위 조건을 사용하므로 효율적이고, SQL 엔진이 최적화하여 실행 속도가 빠를 가능성이 큼.
  1. 두 번째 방식 => WHERE YEAR(C.SALES_DATE) = 2022 AND MONTH(C.SALES_DATE) =1
  • 이 방식은 SALES_DATE에 대해 연도와 월을 추출하는 함수를 적용한다. 인덱스가 있어도 함수가 적용된 필드는 인덱스를 사용할 수 없게 되므로 테이블 전체를 스캔할 가능성이 높다.
  • 그래서 이 방법은 일반적으로 성능이 떨어지며, 대규모 데이터셋에서는 쿼리 시간이 더 길어질 수 있다.

결론적으로 기존에 사용하던 첫 번째 쿼리가 인덱스 사용 측면에서 유리하여 일반적으로 더 빠르게 실행될 가능성이 크다. 새롭게 알게된 방식이 가독성도 좋고 날짜와 직접적으로 관련된 함수이다 보니 당연히 성능에서도 우수하겠거니 생각했는데 내 생각과는 달랐다. 또 하나의 꿀팁을 얻었다 !

post-custom-banner

0개의 댓글