본문 바로가기

Database

[SQL] BETWEEN과 연산자 부등호 성능 차이비교

반응형

LeetCode 사이트를 통해서 SQL 문제를 종종 푸는 편이다.

이 사이트의 좋은 기능 중 하나로, 다른 사람들이 작성한 코드를 실행 속도와 함께 내가 작성한 코드와 비교를 해준다. 

 

위 사진처럼 내가 작성한 코드의 실행 속도를 바탕으로 문제를 해결한 사람들의 코드 중에 어느 정도의 위치에 있는지 지표를 나타내어준다. 근데 이 그래프를 보면 내가 작성한 코드가 너무 느린 것처럼 보이는 것이었다. 속도가 빨랐던 다른 사람들의 코드를 비교해보니 나는 BETWEEN을 활용했고, 다른 이는 부등호로 문제를 풀었던 차이 밖에 없었다.

 

between activity_date '2019-06-28' and '2019-07-27'
where activity_date >= '2019-06-28' and activity_date <= '2019-07-27'

 

between 구문만 부등호를 이용하여 코드를 재제출해봤더니 300ms나 줄었다! 

설마 between과 부등호 간 인덱스 탐색 과정에서 큰 차이가 있는걸까? 라는 의구심이 들었고, 여러 글들을 찾아보았다.


 

SQL 처리속도는 연산자로 하는 것이 더 빠릅니다.
이유는 BETWEEN AND를 사용할 경우 연산자로 변환하는 과정을 한번 더 거치기 때문에 그렇습니다.

출처: https://devjhs.tistory.com/402 [키보드와 하루:티스토리]

 

[oracle] BETWEEN AND - 범위에 있는 값 가져오기

1. BETWEEN AND - 역할컬럼에서 BETWEN AND 사이에 있는 값을 가져오는 역할 ◈ 구문형식 컬럼 BETWEEN 값1 AND 값2 2. BETWEEN AND - 기본 테이블◈ TEST_TABLE_ONE IDX NAME AMT ID TEL1 테스트1 1000 test1 2 테스트2 2000 test2

devjhs.tistory.com

 

이유는 cpu cycle 때문이라고 합니다.

즉 검색 하는 시작점이 다르기 때문이며  DB도 당연하게 CPU 연산으로 속도 차이가 나기 때문이랍니다 !

출처: http://www1.cikorea.net/bbs/view/tip?idx=23316&lists_style=

 

between VS 부등호 연산 승자는?

얼마나 차이 나는지 가끔 궁금했는데 찾아보니 이렇군요.   날짜 계산을 위한 함수.  그냥 AND 조건 연산. 당연히 날짜는 날짜로 계산해야지! 라고 생각 했는데 예상을 뒤엎고 결과는 between 보다

www1.cikorea.net

 

The query engine converts between into >= and <= (take a look at the query plan) so in practise they're identical and in theory >= <= is faster because the engine won't have to translate. Good luck noticing a difference though.

https://stackoverflow.com/questions/921282/compare-performance-difference-of-t-sql-between-and-operator

 

Compare performance difference of T-SQL Between and '<' '>' operator?

I've tried searching through search engines,MSDN,etc. but can't anything. Sorry if this has been asked before. Is there any performance difference between using the T-SQL "Between" keyword or using

stackoverflow.com


명확하게 무엇 때문에 속도에 있어서 차이가 있다라고 아는 사람이 얼마 없는 것 같다. 대략적인 추론으로는 단순히 between을 부등호로 변환하는데 소요되는 시간이 더 추가될 뿐? cpu cycle 때문이다? 정도로만 알아내었다.

물론 dbms 종류에 따라서도 속도의 차이가 있겠지만, 앞으론 between보단 부등호를 활용하는 습관을 지녀야겠다! 

반응형