INDEX
우리가 흔히 보는 책의 색인처럼 오라클내에서 빠르게 검색해주는 기능
테이블과 별도의 장소에 저장된다
1. 사용자의 SQL문에서 WHERE/JOIN 에 자주 사용되는 컬럼이 대상
2. 갯수는 사용형태에 따라 적절하게 사용
3. 너무 많은 인덱스는 성능이 감소
4. 빈번하게 변경되지 않는 테이블에 적용
5. 컬럼의 분포도가 2~4%가 최적(10%기준)
6. 테이블의 사이즈가 큰 곳에 사용
*인덱스를 만들면 SELECT속도는 향상되나 DML속도는 저하됨
SQL> --내가 생성한 제약검색
SQL> DESC USER_CONSTRAINTS
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE
FROM USER_CONSTRAINTS
WHERE TABLE_NAME IN('EMP1','DEPT1');
SQL> --PK,UK는 인덱스 자동생성
SQL> DESC USER_INDEXES
1 SELECT INDEX_NAME, INDEX_TYPE
2 FROM USER_INDEXES
3* WHERE TABLE_NAME IN('EMP1','DEPT1')
INDEX_NAME INDEX_TYPE
------------------------------ --------------------------
DEP1_LOC_UK NORMAL
EMP1_EMPNO_PK NORMAL
SYS_C003005 NORMAL
SYS_C003006 NORMAL
SQL> SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE
2 FROM USER_CONSTRAINTS
3 WHERE TABLE_NAME IN('EMP1','DEPT1');
CONSTRAINT_NAME C
------------------------------ -
DEP1_LOC_UK U
SYS_C003012 C
SYS_C003005 P
SYS_C003006 U
SYS_C003007 C
EMP1_SAL_CK C
EMP1_EMPNO_PK P
EMP1_DEPTNO_FK R
8 개의 행이 선택되었습니다.
SQL> --PK,UK는 인덱스 자동생성
SQL> SAVE INDX
file INDX.sql(이)가 생성되었습니다
SQL> @INDX
INDEX_NAME INDEX_TYPE
------------------------------ ---------------------------
DEP1_LOC_UK NORMAL
EMP1_EMPNO_PK NORMAL
SYS_C003005 NORMAL
SYS_C003006 NORMAL
SQL> CREATE INDEX IDX_EMP1_ENAME
2 ON EMP1(ENAME);
인덱스가 생성되었습니다.
SQL> @INDX
INDEX_NAME INDEX_TYPE
------------------------------ ---------------------------
DEP1_LOC_UK NORMAL
EMP1_EMPNO_PK NORMAL
IDX_EMP1_ENAME NORMAL
SYS_C003005 NORMAL
SYS_C003006 NORMAL
SQL>--인덱스 삭제
SQL>DROP INDEX IDX_EMP1_ENAME
'Programing > Oracle' 카테고리의 다른 글
Oracle - USER 사용자 관리 (0) | 2008.07.29 |
---|---|
Oracle - SEQUENCE , SYNONYM (0) | 2008.07.29 |
Oracle - VIEW (0) | 2008.07.29 |
Oracle - CONSTRAINTS (0) | 2008.07.29 |
Oracle - DDL(DATA DEFINITION LANGUAGE) (0) | 2008.07.29 |