반응형
인덱스(INDEX)  
- DB테이블에 있는 데이터를 빨리 찾기 위한 용도의 DB객체
- 일종의 색인기술 (목차)
- 테이블에 INDEX를 생성하게 되면 INDEX TABLE을 생성해관리한다.
- 인덱스는 테이블에 있는 하나 이상의 컬럼으로 만들 수 있다.
(가능하면 3개의 이하로. 신빙성이 떨어짐)

- 가장 일반적인 B-tree(Binary Search Tree, 2진검색)인덱스는
인덱스 키 (인덱스로 만들 테이블의 컬럼 값)와
이 키에 해당하는 컬럼 값을 가진 테이블의 로우가 저장된 주소 값으로 구성됩니다. ex) 1,2,3,4 /5/ 6,7,8,9,10

- 인덱스는 1개 이상의 컬럼으로 생성할 수 있으며, 최대 32개의 컬럼까지 저장하여 생성할 수 있다.(권장 3개이하)
- 2개 이상의 컬럼으로 생성된 인덱스를 복합 인덱스라 부른다.
- 테이블에 종속적이다.
- 기본키(주 키 = PRIMARY KEY), 유일키(UNIQUE) 생성시 자동으로 인덱스 생성됨.--중복값이 없다.


[INDEX] 적용 전 후에 따른 속도




INDEX를 사용해야 할 컬럼 : 
- WHERE절이나 JOIN조건에서 자주 사용되는 열에 생성
 단, 컬럼이나 값에 대한 가공이 없어야 한다.
ex) SUBSTR(DEPTNO, 1, 2) = 10 (x)
      DEPTNO = 10 (o)

- 조회결과가 전체행의 5~15% 정도로 읽어들일 것으로 예상되는 컬럼
단, 5~15%라도 데이터가 너무 많을 경우에는 인덱스를 사용해도 소용이 없을 수 있다.
그런 경우에는 다른 방법으로 (페이징처리(더보기) 등) 처리를 해주는 것이 좋다.
--중복값이 없는 PRIMARY KEY
--PRIMARY KEY 제약조건 추가시 INDEX자동 형성

INDEX를 사용x하지 말아야 할 컬럼 : 
- 테이블에 데이터가 너무 적거나(5%이하) 또는 15%이상의 데이터가 있는 경우
- WHERE절에 자주 사용되지 않는 열은 사용되지 않는다.
- 중복값이 많은 경우
- 테이블이 자주 갱신될 때
- 값에 null이 많은 컬럼


-- !=,^=는 INDEX 가능. <>는 불가 LIKE도 가능.
 
인덱스 딕셔너리
SYNTAX
1. INDEX 생성
CREATE INDEX [계정명(=스키마명).]인덱스명 ON[계정명.]테이블명(컬럼1,컬럼2,컬럼3,....) ;

중복값
--[제약조건 형성에 따른 INDEX자동형성]
ALTER TABLE CUST
ADD CONSTRAINT CUST_CUSTID_PK PRIMARY KEY(CUST_ID);

CREATE INDEX CUST_CUSTID_IDX ON CUST (CUST_ID);

--[중복값이 있는 컬럼에 INDEX추가]
CREATE INDEX CUST_GENDER_IDX ON CUST(CUST_GENDER);

--[중복값이 없는 컬럼에 INDEX추가]
CREATE UNIQUE INDEX CUST_ID_IDX ON CUST(CUST_ID);   
--ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found
CREATE UNIQUE INDEX CUST_CITY_IDX ON CUST(CUST_CITY);
2. INDEX 재생성
CREATE INDEX 인덱스명 ON 테이블명(컬럼명, 컬럼명, ...) ;
오라클은 ALTER INDEX문을 사용해서 인덱스 컬럼 변경 불가
- 인덱스의 컬럼을 추가, 제거 또는 순서를 변경하기 위해서는 인덱스를 삭제(DROP)하고 다시 생성(CREATE)해야 한다.
 
3. 수정형식
--인덱스명 변경(인덱스명만 가능, 컬럼추가,삭제,변경 불가)
ALTER INDEX 기존인덱스명 RENAME TO 변경인덱스명;
ALTER INDEX PERSON_INDEX_NM_MAIL RENAME TO PERSON_INDEX ;
ALTER INDEX CUST_CUSTID_IDX RENAME TO CUST_ID_INDEX;
4. INDEX 삭제 (인덱스 컬럼 수정/변경/제거는 삭제 후 재생성으로 가능)
DROP INDEX 인덱스명 ;
DROP INDEX PERSON_INDEX ; 
DROP INDEX CUST_ID_INDEX;
5. INDEX리빌드: 인덱스 속도가 저하되었거나, 깨졌을 경우
ALTER INDEX 인덱스명 REBULID ;
 
BLEVEL(Branch level) : 오라클이 index에 접근할 때 몇 단계를 거쳐서 해당 위치를 찾아가는지의 여부를 나타냄. CREATE INDEX CTM_IDX_ID_NM ON CUSTOMERS (CUST_ID);
SELECT TABLE_NAME, INDEX_NAME, BLEVEL FROM DBA_INDEXES WHERE OWNER = 'TEST';

TABLE복제시 NOT NULL을 제외한 제약조건은 복사되지 않는다.

인덱스 딕셔너리

반응형

+ Recent posts