728x90
반응형
인덱스(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을 제외한 제약조건은 복사되지 않는다.
인덱스 딕셔너리
728x90
반응형
'[ORACLE]' 카테고리의 다른 글
[ORACLE] DCL - GRANT, REVOKE, ALTER USER RENAME (0) | 2024.01.23 |
---|---|
[ORACLE] SEQUENCE - CURRVAL, NEXTVAL (0) | 2024.01.22 |
[ORACLE] JOIN (0) | 2024.01.19 |
[ORACLE] SQL파일 export&import (0) | 2024.01.18 |
[ORACLE] Transaction - COMMIT, SAVEPOINT, ROLLBACK, VIEW (0) | 2024.01.18 |