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로 변환되어 인덱스를 사용할 수 있음

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...