01.오라클/007.DB Knowledge Base

[오라클]INDEX 생성 방법

redkite 2012. 12. 19. 12:37
인덱스 생성: Syntax
하나 또는 하나 이상의 Column에 인덱스를 생성

CREATE INDEX 인덱스
ON 테이블(Column[,Column]...);


♠예 :S_EMP테이블의 LAST_NAME Column에 대한 질의 액세스 속도를 빠르게 하기 위한 인덱스를 만드시오.

  SQL>CREATE INDEX s_emp_last_name_idx
2 ON s_emp(last_name);

Index created.



인덱스 생성:Guideline

  1. 인덱스를 만드는 때
  WHERE절이나 조인 조건에서 Column을 자주 이용할 때
  Column이 넓은 범위의 값을 가질때
  많은 NULL 값을 갖는 Column일 때
  테이블의 Data가 많고 그 테이블에서 Query되는 행의 수가 전체의 10-15%정도 일때

 2. 인덱스를 만들지 않아야 할 때
  테이블이 작을때
  Column이 질의의 조건으로 사용되는 경우가 별로 없을 때
  대부분의 질의가 행의 10-15% 이상을 검색한다고 예상될때
  테이블이 자주 변경될때

인덱스 확인
USER_INDEXES Dictionary 뷰는 인덱스의 이름과 Unique 여부를 가지고 있다.
USER_IND_COLUMNS 뷰는 인덱스 명, 테이블 명과 Column 명을 가지고 있다.

SQL> SELECT ic.index_name, ic.column_name
2 ic.column_position, ix.uniqueness
3 FROM user_indexes ix, user_ind_columns ic
4 WHERE ic.index_name = ix.index_name
5 AND table_name = 'S_EMP';


인덱스 확인
USER_INDEXES Dictionary 뷰에 인덱스가 있는지 확인하시오.
USER_IND_COLUMNS 뷰를 Query 하여 인덱스를 갖고 있는 Column을 확인할 수도 있다.
♠ 질의 예제 :S_EMP 테이블에서 이미 생성된 인덱스, 관련된 Column 명, Unique 여부를 Display 하라.


SQL> SELECT ic.index_name, ic.column_name
2 ic.column_position, ix.uniqueness
3 FROM user_indexes ix, user_ind_columns ic
4 WHERE ic.index_name = ix.index_name
5 AND table_name = 'S_EMP';

인덱스 삭제
인덱스를 삭제합니다.
SQL> DROP INDEX s_emp_list_name_idx;
Index dropped.

인덱스를 삭제하려면 그 인덱스의 소유자이거나 DROP ANY INDEX 권한을 가지고 있어야 한다.


Syntax
인덱스를 수정할 수는 없다.
인덱스를 변경하려면 삭제한 다음 다시 만들어야 한다.
INDEX 명령을 써서 인덱스를 삭제하라.
인덱스를 삭제하려면 그 인덱스의 소유자이거나 DROP ANY INDEX 권한을 가지고 있어야 한다.
DROP INDEX 인덱스;



CREATE INDEX IDX_ETL_LOG_ID ON ps_mom.etl_job_log_tbl(LOG_ID); -- PS_MOM 에 인덱스 추가(2010.12.03)

--CREATE INDEX IDX_RACLIENT ON RACLIENT(CERTI_CODE,STATUS_FLAG) --ONLINE; -- 국민 RA_CLIENT 테스트 인덱스 추가(2010.12.03)