Akashic Records

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

오래된글/DataBase

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

Andrew's Akashic Records 2018. 4. 15. 22:46
728x90

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



728x90

'오래된글 > DataBase' 카테고리의 다른 글

MongoDB, 설치와 간단 사용법  (0) 2018.04.17
MongoDB 제한자  (0) 2018.04.17
Hashing  (0) 2018.04.15
CUBRID 주요기능  (0) 2018.04.15
Chapter 6 PL SQL(Procedural Language/SQL) - 9  (0) 2018.04.15
Comments