2022-11-30 데이터 베이스 오라클 SQL : INDEX
4. INDEX
- 인덱스는 자료의 검색효율을 증대시키기 위한 객체
- DB의 성능은 데이터 검색에 있고, 이 기능을 지원하는 가장 효율적인 방법이 INDEX를 활용한 방법임
- 인덱스의 용도(장점)
. SELECT,INSERT,UPDATE 문의 조건절
. 데이터의 정렬(ORDER BY), 데이터의 그룹화(GROUP BY)에 사용
. DBMS의 부담을 줄이고 성능을 개선
- 인덱스 사용시 단점
. 비용(인적자원)과 추가공간이 필요
. 인덱스 유지하는데 비용과 시간이 많이 소요됨(삽입,삭제,변경이 잦다면)
- 종류
. Unique index.Non-unique Index
. Normal / Function-Based / Bitmap
(사용형식)
CREATE [UNIQUE|BITMAP] INDEX 인덱스명
ON 테이블명(컬럼명[,컬럼명,...])[ASC|DESC]
※ 자바 LIST, SET, ,MAP
LIST 순번이 부여되는 기억공간. INDEX가 부여되어 있다. (데이터 중복 허락)
SET 데이터에 인덱스가 없음. 내용을 봐서 내용이 같은 값을 허락하지 않음
(Equst와 Hash를 재정의 해서 씀)
SET - treeSet
MAP-treeMap
바이너리 서치 트리
트래버스. 검색 운행.
-- Unique index : 기본키가 아니다. 중복되지 말아야 한다.(NULL 값 포함)
-- NULL값을 가질수 있지만 NULL값을 1개만 가진다.
-- Normal 수식어 없이 쓰는 인덱스. 비트리개념
-- Bitmap : 비트별 매핑되어지는 값을 이용해서 나머지 주소를 저장 -> hasing
-- (물리적 주소값 row id)
-- Function-Based (Normal Index)함수가 적용된 노말 인덱스 이다.
-- 인덱스 : 목차 (목차를 이용하면 빨리 찾을 수 있다.)
-- 인덱스는 검색트리를 이용함..Tree 자식 있는 노드 : 간노드 / 자식 없는 트리 : 단노드 /리프노드
(사용형식)
CREATE [UNIQUE|BITMAP] INDEX 인덱스명 -- [UNIQUE|BITMAP]생략되면 Non-unique 인덱스
ON 테이블명(컬럼명[,컬럼명,...])[ASC|DESC]
사용예) KOR_LOAN_STATUS테이블에서 201112년 강원도 대출현황을 조회하시오
SELECT *
FROM KOR_LOAN_STATUS
WHERE PERIOD='201112'
AND REGION='강원';
CREATE INDEX IDX_KLST ON KOR_LOAN_STATUS(PERIOD,REGION);
-- PERIOD,REGION를 사용해서 인덱스를 만들겠다.
-- 인덱스를 만들고 다시 실행하면 더 빨리 검색된다.
CREATE TABLE TEMP01 AS
SELECT *
FROM KOR_LOAN_STATUS,EMPLOYEES; -- 카타시안 PRODUCT 조인 50932개
SELECT *
FROM TEMP01
WHERE PERIOD='201112'
AND REGION='강원';
CREATE INDEX IDX_TEMP01 ON TEMP01(PERIOD,REGION); -- TEMP01의 인덱스 생성
CREATE INDEX IDX_KLST ON KOR_LOAN_STATUS(PERIOD,REGION);
사용예) 회원테이블에서 회원의 첫 번째 주민번호 앞의 2글자로 인덱스를 구성하시오
CREATE INDEX IDX_MEM_REGNO0 ON MEMBER (SUBSTR(MEM_REGNO1,1,2));
SELECT MEM_ID,MEM_NAME,MEM_ADD1||' '||MEM_ADD2
FROM MEMBER
WHERE SUBSTR(MEM_REGNO1,1,2)='01';
-- 인덱스는 자동으로 실행되어진다. => 인덱스 재구성
** 인덱스 재구성
ALTER INDEX 인덱스명 REBUILD
. 많은 자료의 변동이 발생된 직후
. 저장공간이 변경된 경우