2011년 6월 1일 수요일

Index가 옵티마이저에 의해 수행되는 경우

Index 생성 기준

포함해야 할 컬럼
- Where 절에 자주 사용되는 컬럼
- 테이블 조인에 자주 사용되는 컬럼
- 분포도가 좋거나 유일한 컬럼
- Select 문장의 Min, Max 의 기준이 되거나 정렬에 자주 사용되는 컬럼

포함하지 않아야 할 컬럼
- 분포도가 좋지 않은 컬럼
- 테이블의 Row 수가 적은 테이블의 컬럼
- 자주 수정하는 컬럼

Index가 옵티마이저에 의해 수행되는 경우

1. Unique 인덱스의 Equal(=) 검색
select * from emp where empno = 7788
empno 컬럼에 생성된 Unique 인텍스(PK_EMP)를 통해서 Rowid를 얻은 후 랜덤 액세스를 통한 한 Row를 조회

2. Unique 인덱스의 범위(Range) 검색
select * from emp where empno >=, >, <=, < 7654
연산자 >,>=,<=,< 등을 인덱스 컬럼에 사용하는 경우에 주로 Index Range Scan이 일어남

3. 중복(Non-Unique) 인덱스의 범위 검색
Create Index emp_job on emp (job);

select * from emp where job like 'SALE%'
select * from emp where job ='SALESMAN'

emp 테이블의 job 컬럼에 중복을 허용하는 emp_job 인텍스를 생성한 경우에도 like, 같은 범위 연산자를 사용한 SQL 뿐만 아닐, = 비교하는 경우에도 Index Range Scan이 일어남

4. OR & IN 조건 - 결과의 결합
select * from emp where empno in (7654,7788)
select * from emp where empno = 7654 or empno = 7788

인텍스 컬럼에 OR, IN 연산자를 사용하면 각각의 조건 값을 나누어 실행한 후 결합이 일어나게 됨
UNION ALL을 사용해도 같음 실행 계획이 나옴

5. NOT BETWEEN 검색
select * from emp where empno not between 7654 and 7788
select * from emp where empno < 7654 or empno > 7788

where 절 조건에 NOT 연산을 하면 인덱스를 사용하지 않음
NOT BETWEEN A AND B 를 적용한 경우에는 A > or < B로 변환되어 인덱스를 사용할 수 있음

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...