99클럽 1일차 TIL: 쿼리 성능
2024. 4. 4. 23:13ㆍ개발 공부
728x90
반응형
#1. 오늘의 학습 키워드
SQL 쿼리에서 between 과 부등호의 성능 차이
- myBatis 에서 쿼리로 어떤 날짜를 뜻하는 컬럼값을 가지는 테이블에서 날짜 범주 ( start_date 와 end_date ) 사이 조건에 부합하는 행들만 뽑아오고 싶을 떄:
- 아래와 같은 두 가지 방식이 있다. 이때 좋은 가독성을 가지는 코드는 between 을 사용한 조건문이지만, pr Review 로 부등호가 더 낫다는 피드백을 받았다.
SELECT *
FROM table_
WHERE date BETWEEN '20240101' AND '20241231'
SELECT *
FROM table_
WHERE date >= '20240101'
AND date <= '20241231'
- 이 성능의 차이에 대해서 관심을 갖고 검색하였다.
#2. 공부한 내용
- https://stackoverflow.com/questions/921282/compare-performance-difference-of-t-sql-between-and-operator
- 위 스택오버플로우 포스팅에 달린 답변에 따르면 between 을 쿼리 엔진이 부등호 비교로 바꿔주기 때문에, 성능 상 다를 점이 없다고 한다.
- 단지 translate 에서의 overhead가 살짝 있을 뿐.
- 위 스택오버플로우 포스팅에 달린 답변에 따르면 between 을 쿼리 엔진이 부등호 비교로 바꿔주기 때문에, 성능 상 다를 점이 없다고 한다.
- https://jiwon709.tistory.com/15
- https://velog.io/@ddingmun8/MySQL-BETWEEN-과-성능-차이
- https://velog.io/@minyul/Mysql-Query-Between-과-성능-차이-비교-더미데이터-50만
- 위 블로그들에서는 실제로 테스트를 하였고, 그 결과 부등호가 더 빠른 시간 내의 결과를 도출하였다고 한다.
- 이 이유에 대해서는 CPU Cycle 이라는 답을 냈다.
- 검색하는 시작점이 다르기에, 연산하는 범주가 달라서 그런 것으로 예상된다.
- 전자는 각 행에 대해서 between 조건 비교를 해야하지만, 후자는 사실 상 두개의 조건으로, 조건 1로 대상을 좁힌 다음, 그 대상에 대해서 조건 2를 적용할 수 있으니라고 개인적인 결론을 내본다.
- 위 블로그들에서는 실제로 테스트를 하였고, 그 결과 부등호가 더 빠른 시간 내의 결과를 도출하였다고 한다.
#3. 오늘의 회고
- 해당 쿼리들의 성능의 차이에 대한 두 개의 상반된 주장이 펼쳐지고 있기에, 결론을 짓기가 애매하다.
- 결국 무언가에 대하여 검색할 때, 블로그 글 한 편만 보고 확신을 할 수 없는 이유다.
- 반드시 크로스 체크가 필요하다.
- 이럴 때는 결국 경험적인 것이 스스로의 질문에게는 답이 되는 것 같다.
- 스스로 pgadmin으로 쿼리를 실행해, 시간을 확인한 결과, 큰 차이는 없지만, 대게 부등호를 쓰는 쪽이 빨랐다.
- 그러나 유의미한 차이 정도는 아닌 걸로 생각이 든다.
- 같은 쿼리로도 계속 소요 시간이 들쭉날쭉 했기에..
- 그래서 성능에 대한 욕심이 더 크다면 부등호, 코드 가독성을 챙기고 싶다면 between 을 택하는 것이 맞는 것 같다.
- 그러나 유의미한 차이 정도는 아닌 걸로 생각이 든다.
- 스스로 pgadmin으로 쿼리를 실행해, 시간을 확인한 결과, 큰 차이는 없지만, 대게 부등호를 쓰는 쪽이 빨랐다.
728x90
반응형
'개발 공부' 카테고리의 다른 글
99클럽 7일차 TIL: Collectors.toList() vs. toList() (0) | 2024.04.10 |
---|---|
99클럽 6일차 TIL: Unix Time (nanoseconds) (0) | 2024.04.09 |
99클럽 5일차 TIL: Loki (0) | 2024.04.08 |
99클럽 4일차 TIL: Collectors.toMap() (2) | 2024.04.07 |
99클럽 3일차 TIL: JPA vs. MyBatis (2) | 2024.04.06 |