-
SQL 인덱스 기본 사용법 - 수정중데이터베이스/최적화 2024. 5. 2. 22:31728x90반응형
수직적 탐색 :
수평적 탐색 :
인텍스를 정상적으로 사용한다?
인덱스를 정상적으로 사용한다는것은 리프 블록에서 스캔 시작점을 찾고 거기서부터 스캔하다가 중간에 멈추는것을 의미한다.
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반응형'데이터베이스 > 최적화' 카테고리의 다른 글
DB 커넥션 풀을 사용해도 시스템 성능의 영향을 끼치는것 (1) 2024.07.22 인덱스 온리 스캔 불가능 (0) 2024.07.17 postgresql 실행계획 파헤치기 (0) 2024.05.10 SQL?옵티마이저?프로시저?SQL최적화 방법?소프트파싱?하드파싱?는 무엇일까? with oracle (0) 2024.04.08