woowacourse-study / 2022-Real-MySQL

⚡️토르⚡️의 짜릿한 Real MySQL 뽀개기 🔨
9 stars 3 forks source link

BETWEEN과 IN #30

Open jurlring opened 2 years ago

jurlring commented 2 years ago

주제

BETWEEN과 IN의 실행 계획 차이

선정 이유

둘다 자주 쓰는 쿼리는 아니여서 뭐가 다르지 라는 생각도 잘 안해봤는데 둘의 실행 계획에서 차이가 크다는 것에 놀라서 선정하게 되었다.

해당 텍스트

BETWEEN : 크거나 같다, 작거나 같다를 합친 연산자

SELECT * FROM test
WHERE dept BETWEEN 'd003' AND 'd005' AND emp = 10001;

IN : 설정한 값과 같은지 동등 비교하는 연산자 여러 값을 OR 관계로 묶어 나열하는 조건을 WHERE 절에 사용할 때 쓸 수 있는 키워드

SELECT * FROM test
WHERE dept IN ('d003', 'd004', 'd005') AND emp = 10001;

BETWEEN은 선형으로 인덱스를 검색 vs IN은 동등 비교를 여러번

⇒ IN이 인덱스를 더 최적으로 사용할 수 있음, 실행계획을 보면 확인하는 row값이 차원이 다름..

BETWEEN을 사용한 쿼리와 IN을 사용한 쿼리 모두 인덱스 레인지 스캔(pk라는 가정)을 하고 있지만 실행 계획의 rows 컬럼에 표시된 레코드 건수는 매우 큰 차이가 있음

BETWEEN을 사용한 쿼리 : 부서 번호가 ‘d003’인 레코드부터 ‘ d005’인 레코드의 전체 범위를 다 비교해야한다.

IN을 사용한 쿼리 : 부서 번호와 사원 번호가 (’d003’, 10001), (’d004’, 10001), (’d005’, 10001) 조합인 레코드만 비교한다.

관련 페이지

기억이 안남요..