본문 바로가기

Programing/Oracle

Oracle - INDEX

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