리트코드 SQL 문제들을 푸는 도중 값에 대한 범위에 대한 조건을 처리해야 했다.
의문점이 생겼다.
언제 BETWEEN 을 쓰는 게 적합하고, 언제 IN 을 쓰는 게 적합한지 내 머릿 속의 기준이 애매모호했다.
따라서 아래와 같은 의문점을 해결해보고자 한다.
BETWEEN 을 쓰는 게 적합하고,IN 을 쓰는 게 적합한지웬만하면 순차데이터는
BETWEEN, 특정데이터셋은IN이 좋다.일반적으로
BETWEEN이IN보다 빠르다. 이는 내부동작과정 때문이다.
IN은 여러OR보다 빠르다. 내부적으로 인덱스를 사용할 수 있기 때문이다.
BETWEEN , IN 사용 기준The
BETWEENoperator is utilized to compare two values inside a range, whereas theINoperator is utilized to compare a value with a set of values.
BETWEEN 절은 range 에 대한 필터링을 하기 위함이라는 것을 주목하자.
가령 아래와 같이 사용될 수 있다.
SELECT *
FROM Orders
WHERE Order_Date BETWEEN '2020-01-01' AND '2020-12-31';
IN() 절은 set of values 에 대한 필터링을 하기 위함이라는 것을 주목하자.
우리가 필터링하고자 하는 specific values 에 대해서 처리를 해야한다.
SELECT * FROM Customers
WHERE CustomerName IN ('IBM', 'Microsoft', 'Apple');
BETWEEN,IN Operation Plan in MySQLSELECT * FROM Person WHERE age BETWEEN 1 AND 3;
SELECT * FROM Person WHERE age IN [1, 2, 3];
사실 위 BETWEEN, IN 은 아래와 같이 변경된다.
select * from person where age >= 1 and age <= 3;
select * from person where age = 1 or age = 2 or age 3;
일반적으로 AND 가 OR 보다 빠르므로 BETWEEN 이 더욱 우세하다.
(순차적인 조건에 대해 true인 경우, 다음 조건식을 판단하지 않으므로)
또한 = 을 통해 조건 판별을 하는 것이 아닌, ≥ , ≤ 와 같은 range 에 대한 판별을 하므로 general data 에 대해서 우세하다.
또한 인덱스 처리가능 여부에 따라 다르다.
Is there a performance difference between BETWEEN and IN with MySQL or in SQL in general?
m , 범위의 크기가n 이라고 치자.BETWEEN primary key index 에 대해 single "range scan" 을 사용하여 구현될 수 있다. (최대 n 개의 인덱스 노드들을 순회할 수 있다.)O(n + log m) 로 처리될 수 있다.n "range scans" 을 사용하여 구현된다.O(n * log m) 로 처리될 수 있다.인덱스가 사용되지 않는다면, full table scan 을 실행하여 각각의 row 에 대해 조건에 대한 필터링을 한다.(evaluate the predicate on each row)
BETWEEN 은 두 가지 조건을 처리한다 : 하나는 lower bound, 하나는 upper boundO(m) 이다.IN 은 n 개의 조건 모두를 처리한다 : m 개의 row 에 대해 n 개의 조건통과여부를 판별한다.O(m * n) 이다.BETWEEN / For Specific Set, Use INSELECT
name
FROM
celebrity
WHERE
birth
BETWEEN '1980-01-01' AND '2000-12-31';SELECT
name
FROM
celebrity
WHERE
name IN ('Jusin Biber','Beyonce','Pop Smoke');IN than multiple ORIN clause queries outperforms the multiple OR clauses variants. The difference is much larger than the queries on the indexed attribute above and the gap widens even more with an increase in the number of predicates. With 5000 predicates, PostgreSQL executes the IN clause query approximately 288x faster than the OR clause (1.8 seconds vs. 518.2 seconds).
SELECT * FROM item WHERE price IN (?); –- IN Clause SELECT * FROM item WHERE price = ? OR price = ? OR price = ? OR ... ; -- OR Clauses
IN 은 내부적으로 인덱스를 탈 수 있다. 따라서 여러 OR 보다 IN 을 사용하는 것이 조금 더 빠르다.
위 그림과 같이 조건절(Predicates)의 개수가 늘어날 수록 OR 가 수행속도가 더 오래 걸린다는 것을 볼 수 있다.
Is there a performance difference between BETWEEN and IN with MySQL or in SQL in general?
AGE [1, 2, 3] vs. AGE BETWEEN 1 AND 3
SQL Between: Best Way to Retrieve Desired Range of Values
BETWEEN AND IN operators in SQL
Query best practices: When should you use the IN instead of the OR operator? | OtterTune
Great article! . But without data, what is a data scientist? As Harvard Business Review puts it, data is the new oil. There is a massive shortage of skilled professionals in data-driven careers. If you're a beginner, it's the perfect time to explore the dynamic world of data science. Join our Data Science course at Skyappz today and take your skills to the next level!
Visit our website : https://skyappzacademy.com/datascience/