[Oracle]
※ CREATE [UNIQUE] INDEX [인덱스명] ON [테이블명]([컬럼명], [컬럼명], ...);
여기서 [UNIQUE]는 생략할 수 있고, PK일 경우 [UNIQUE]를 사용
ex) CREATE INDEX INDEX_TEST ON INDEX_TABLE(DATE_FLD, DATE_FLD1) ;
컬럼을 가공하여 INDEX를 생성할수 있음
ex) CREATE INDEX INDEX_TEST ON INDEX_TABLE(TO_DATE(DATE_FLD, 'yyyymmdd'), DATE_FLD1);
※ DROP INDEX 인덱스명
ex) DROP INDEX INDEX_TEST;
※ INDEX 확인
ex)
SELECT *
FROM USER_OBJECTS
WHERE OBJECT_TYPE='INDEX'
AND OBJECT_NAME='INDEX_TEST';
※ 힌트 강제 INDEX
ex)
INDEX() : INDEX를 순차적으로 SCAN
INDEX_DESC() : INDEX를 역순으로 SCAN
검색할 테이블에 얼라이언스가 있을 경우 괄호에 얼라이언스를 넣어준다.
/*+ INDEX_DESC(TB_SQMSSTBW_201409 IX_SQMSSTBW_201409_N2)*/
[주의사항]
※ INDEX CREATE시나 REBUILD시 테이블에 LOCK이 발생 할 수 있으며, 서비스일 경우 장애가 날 수 있다
※ INSERT, UPDATE, DELETE 시 속도가 저하된다
※ 조회결과가 전체 데이터수의 3~5% 미만일 경우 INDEX SCAN이 효율적이고, 3~5% 이상일 경우는 FULL SCAN이 효율적이다
※ INDEX 컬럼을 다수 설정하였다면 조회조건으로 모두 사용해야 INDEX를 탈 확률이 높아진다
※ INDEX 컬럼을 가공하여 조회조건으로 실행하면 INDEX를 타지 않는다(미리가공)
※ 조회조건에 부정문(<>, NOT), Function이 있을 경우 INDEX를 타지 않는다
'DB' 카테고리의 다른 글
[Oracle]피벗(Pivot)과 언피벗(UnPivot) (0) | 2014.09.25 |
---|---|
[Oracle]Oracle 언어 확인 및 설정 (0) | 2014.06.09 |
[Oracle]NVL, NVL2, NULLIF (0) | 2014.01.20 |
[MySQL]Oracle SQL, MySQL 변환 (0) | 2012.11.13 |
[Oracle]Oracle Instant 설정 (0) | 2012.10.31 |