Open jurlring opened 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’인 레코드의 전체 범위를 다 비교해야한다.
BETWEEN을 사용한 쿼리
IN을 사용한 쿼리 : 부서 번호와 사원 번호가 (’d003’, 10001), (’d004’, 10001), (’d005’, 10001) 조합인 레코드만 비교한다.
IN을 사용한 쿼리
기억이 안남요..
주제
BETWEEN과 IN의 실행 계획 차이
선정 이유
둘다 자주 쓰는 쿼리는 아니여서 뭐가 다르지 라는 생각도 잘 안해봤는데 둘의 실행 계획에서 차이가 크다는 것에 놀라서 선정하게 되었다.
해당 텍스트
BETWEEN : 크거나 같다, 작거나 같다를 합친 연산자
IN : 설정한 값과 같은지 동등 비교하는 연산자 여러 값을 OR 관계로 묶어 나열하는 조건을 WHERE 절에 사용할 때 쓸 수 있는 키워드
BETWEEN은 선형으로 인덱스를 검색 vs IN은 동등 비교를 여러번
⇒ IN이 인덱스를 더 최적으로 사용할 수 있음, 실행계획을 보면 확인하는 row값이 차원이 다름..
BETWEEN을 사용한 쿼리와 IN을 사용한 쿼리 모두 인덱스 레인지 스캔(pk라는 가정)을 하고 있지만 실행 계획의 rows 컬럼에 표시된 레코드 건수는 매우 큰 차이가 있음
BETWEEN을 사용한 쿼리
: 부서 번호가 ‘d003’인 레코드부터 ‘ d005’인 레코드의 전체 범위를 다 비교해야한다.IN을 사용한 쿼리
: 부서 번호와 사원 번호가 (’d003’, 10001), (’d004’, 10001), (’d005’, 10001) 조합인 레코드만 비교한다.관련 페이지
기억이 안남요..