Oracle(2022.03.02)-INDEX
INDEX
-자료검색효율을 높이기 위한 객체
-DBMS의 검색작업의 부하를 줄여 시스템 전체성능 향상
-SELECT 문, INSERT 문, UPDATE 문에서 사용하는 WHERE 절에 사용
-ORDER BY, GROUP BY 절에 사용하여 처리속도 향상
-별도의 기억공간과 인덱스 파일의(구성) 유지에 시간이 많이 소요됨
-INDEX 필요 컬럼
.자주 검색해야하는 컬럼
.WHERE 절의 조건문에 '='연산자를 사용하여 특정 컬럼값을 비교하는 경우
.PRIMARY/FOREIGN KEY 항목
.JOIN에 자주 사용되는 컬럼
- 인덱스의 구분
. UNIQUE VS NON-UNIQUE INDEX(중복O,중복,NULL가능인 이유는 인덱스는 기본키가 아니므로...))
-UNIQUE INDEX에 NULL도 허용되나 한번만 허용
. SINGLE (한개의 컬럼값을 가지고 구성) VS COMPOSITE INDEX (여러개의 항목을)
. NORMAL INDEX
-기본 인덱스, 검색트리 이용( 왼쪽 부모보다 작고, 오른쪽 부모보다 크고를 만족)
-트리구조를 사용(검색횟수가 동일)
-컬럼값과 ROWID(물리적 위치정보)를 기반으로 저장
. BITMAP INDEX
-CARDINALITY 가 작은경우 효율적인 INDEX
-컬럼값과 ROWID(물리적 위치정보)의 2진 조합을 기반으로 저장
. FUNCTION-BASED NORMAL INDEX
-인덱스 구성 컬럼에 함수가 적용된 형태 (ex.SUBSTR(X,2,5))
-검색에 이 인덱스가 사용되는 경우 인덱스 구성에 사용된 함수와
동일 형태이어야만 효율적 검색을 확보할 수 있음
(사용형식)
CREATE [UNIQUE|BITMAP] INDEX 인덱스명
ON 테이블명(컬럼명[,컬럼명,...]) [ASC|DESC]
.'ASC|DESC' : 오름차순 또는 내림차순으로 인덱스 생성
Default 는 ASC임
사용예)
CREATE INDEX IDX_BUYER_NAME
ON BUYER(BUYER_NAME);
SELECT *FROM BUYER
WHERE BUYER_BANKNO='112-650-397811';
->처리되어지는 시간을 제대로 비교하기가 어렵다(데이터 자료가 많이 있지 않기 때문이다.)
CREATE TABLE T_SAMPLE AS
SELECT*FROM CART,BUYPROD;
SELECT COUNT(*) FROM T_SAMPLE;
SELECT *
FROM T_SAMPLE
WHERE BUY_PROD='P302000011';
CREATE INDEX IDX_TSAMPLE
ON T_SAMPLE(BUY_PROD);
인덱스를 생성하고찾으면 더 시간이 빨라진다.
SELECT *
FROM T_SAMPLE
WHERE BUY_PROD='P302000011';
CREATE INDEX IDX_TSAMPLE02
ON T_SAMPLE(SUBSTR(CART_NO,4));
함수를 사용했으므로 함수타입
SELECT *
FROM T_SAMPLE
WHERE SUBSTR(CART_NO,4)='5072800004';
->32초 걸림
**인덱스 재생성
-원본테이블의 자료 변경, 삽입, 삭제가 많이 발생 했을 때
-원본테이블이 다른 저장공간(Table Space)으로 이동한 경우
(사용한 경우)
ALTER INDEX 인덱스명 REBUILD;