인덱스
1. 인덱스를 왜 사용하는 것일까요?
이에 대한 답은 “빠른 검색을 위해서 인덱스를 사용합니다.” 입니다.
여러분이 테이블 생성 방법을 책에서 찾으려고 할 때 어떻게 합니까? 책 첫 페이지부터 한 장씩 넘겨가면서 테이블 생성 방법이 기술되어 있는지 일일이 살펴보는 사람은 드물 것입니다.
일반적으로 책 맨 뒤에 있는 색인(인덱스, 찾아보기)에서 해당 단어(테이블)를 찾아 그 페이지로 이동합니다.
이렇게 원하는 단어를 쉽게 찾는 방법으로 색인, 인덱스가 사용되는 것처럼 오라클의 인덱스 역시 원하는 데이터를 빨리 찾기 위해서 사용됩니다.
2. 인덱스의 장점
검색 속도가 빨라진다.
시스템에 걸리는 부하를 줄여서 시스템 전체 성능을 향상시킨다.
3. 인덱스의 단점
인덱스를 위한 추가적인 공간이 필요하다.
인덱스를 생성하는데 시간이 걸린다.
데이터의 변경 작업(INSERT/UPDATE/DELETE)이 자주 일어날 경우에는 오히려 성능이 저하된다.
4. 인덱스 생성 확인 방법
USER_IND_COLUMNS 데이터 딕셔너리 뷰로 인덱스의 생성 유무를 확인해 봅시다.
SELECT INDEX_NAME, TABLE_NAME , COLUMN_NAME
FROM USER_IND_COLUMNS
WHERE TABLE_NAME IN('EMP', 'DEPT');
8. 인덱스를 사용해야 하는 경우 판단하기
- 인덱스가 검색을 위한 처리 속도만 향상시킨다고 했습니다.
- 하지만, 무조건 인덱스를 사용한다고 검색 속도가 향상되는 것은 아닙니다.
- 계획성 없이 너무 많은 인덱스를 지정하면 오히려 성능을 저하시킬 수도 있습니다.
- 언제 인덱스를 사용하는 것이 좋을까요?
- 다음과 같은 조건에서 사원 테이블의 부서 번호에 인덱스를 거는 것이 좋을까요?
테이블에 전체 행의 수는 10000 건이다.
위의 쿼리문을 전체 쿼리문 들 중에서 95% 사용된다.
쿼리문의 결과로 구해지는 행은 10건 정도이다.
- 조건을 위 표를 비추어보고 판단해 보면 DEPTNO 컬럼을 인덱스로 사용하기에 알맞다는 결론이 납니다.
- 위 결론에 따라 사원 테이블의 부서 번호(DEPTNO)를 인덱스로 지정합시다.
CREATE INDEX IDX_EMP01_DEPTNO
ON EMP01(DEPTNO);
'Server > DBMS' 카테고리의 다른 글
[DBMS_Oracle] 뷰 1 (0) | 2014.12.15 |
---|---|
[DBMS_MySQL] MySQL 설치 및 사용자 추가,권한 (0) | 2014.12.13 |
[DBMS_Oracle] 시퀀스 (0) | 2014.12.08 |
[DBMS_Oracle] dual (0) | 2014.12.08 |
[DBMS] HAVING 조건 (0) | 2014.12.02 |