데이터베이스/최적화
SQL 인덱스 기본 사용법 - 수정중
디찌s
2024. 5. 2. 22:31
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
반응형