본문 바로가기
데이터베이스/최적화

SQL 인덱스 기본 사용법 - 수정중

by 디찌s 2024. 5. 2.
728x90
반응형

수직적 탐색 :

수평적 탐색 :

 

인텍스를 정상적으로 사용한다?

인덱스를 정상적으로 사용한다는것은 리프 블록에서 스캔 시작점을 찾고 거기서부터 스캔하다가 중간에 멈추는것을 의미한다.

 

OR 조건 검색

수직적 탐색을 통해 전화번호가 '01022222222'이거나 고객명이 '홍길동' 인 어느 한 시작지점을 바로 찾을수 없다

따라서 인덱스를 어떤 방식을 구성해도 Range Scan을 할수없다

where (전화번호 = :tel_no  OR 고객명 = :cust_nm)

 

위와같은 쿼리는

 

select *
from 고객
where 고객명 = :cust_nm
union all
select *
from 고객
where 전화번호 =:tel_no
and (고객명 <> :cust_nm or 고객명 is null)

 

로 변경하면 인덱스를 타고 이것을 OR Expansion이라고 부른다.

 

IN 조건 검색

where 전화번호 in ( :tel_no1, :tel_no2)

IN 조건은 OR 조건을 표현하는 다른 방식일 뿐이다.

위 표현은 UNION ALL 방식으로 변경하여 Range Scan을 가능하게한다.

 

select *
from 고객
where 전화번호 = :tel_no1
union all
select *
from 고객
where 전화번호 = :tel_no2

 

In 조건절은 SQL 옵티마이저가 IN-List Iterator 방식으로 변경하여 Index Range Scan을 반복한뒤 이를 통해 Union all으로 변환한 것과 같은 효과를 얻을수 잇다.

 

 

row id : 논리적 주소이며 , 현재 찾는 테이블 레코드가 디스크 상에 어디에 존재하는지 정보를 갖고있는것

728x90
반응형

댓글