INDEX

골블 (Tuscany)·2024년 10월 16일
0

kh교육

목록 보기
2/58

INDEX(색인)

SQL 구문 중 SELECT 처리 속도를 향상 시키기 위해 컬럼에 대해 생성하는 객체이다. 인덱스 내부 구조는 B* 트리(B-star tree) 형식으로 되어 있다. * 장점 1. 이진 트리 형식으로 구성되어 자동 정렬 및 검색 속도가 증가한다. 2. 조회 시 테이블의 전체 내용을 확인해 조회하는 것이 아닌 인덱스가 지정된 컬럼만 이용해 조회해 시스템의 부하가 낮아진다. * 단점 1. 데이터 변경(INSERT,UPDATE,DELETE) 작업 시 이진 트리 구조에 변형이 일어난다. -> DML 작업이 빈번한 경우 시스템의 부하가 늘어 성능이 저하된다. 2. 인덱스도 하나의 객체이기 때문에 별도 저장공간이 필요하다. (메모리 소비) 3. 인덱스는 생성하는데 시간이 좀 필요하다. [작성법] CREATE [UNIQUE] INDEX 인덱스명 ON 테이블명 (컬럼명[, 컬럼명 | 함수명]); 삭제 시 DROP INDEX 인덱스명; * 인덱스가 자동 생성되는 경우 -> PK 또는 UNIQUE 제약조건이 설정된 컬럼에 대해 UNIQUE INDEX가 자동 생성된다.
예시) CREATE TABLE TB_IDX ( TEST_NO NUMBER PRIMARY KEY, TEST_ID VARCHAR(20) NOT NULL ); 이라는 테이블을 생성한다면 PRIMARY KEY로 지정된 TEST_NO에 대해 UNIQUE INDEX가 자동으로 생성 된다. * 인덱스를 이용한 검색 방법 -> WHERE 절에 INDEX가 지정된 컬럼을 언급한다. 예시) SELECT * FROM TB_IDX WHERE TEST_ID = '값'; -> TEST_ID는 UNIQUE INDEX가 생성 되지 않은 컬럼이다. -> 조회 시 수행 시간이 0.017s 정도 걸린다. SELECT * FROM TB_IDX WHERE TEST_NO = '값'; -> TESET_NO는 UNIQUE INDEX가 자동으로 생성된 컬럼이다. -> 조회 시 수행 시간이 0.000s ~ 0.004s 정도 걸린다. * INDEX가 적용된 컬럼을 이용한 SELECT 시 수행 시간이 10~30배 정도 차이가 난다.

번외

PL/SQL 을 사용해 조건문(IF/CASE), 반복문(LOOP, WHILE), 변수 선언이 가능하다. 예시) BEGIN FOR I IN 1..1000000 -- I는 1부터 100만까지 반복한다. LOOP INSERT INTO TB_IDX VALUES (I, 'TEST'|| I); END LOOP; COMMIT; END; -> I가 1부터 100만까지 반복하면서 -> LOOP ~ END LOOP; 사이에 작성된 내용을 수행하고 수행이 완료되면 -> INSERT 내용을 COMMIT; 하고 -> 반복문 종료. SELECT COUNT(*) FROM TB_IDX;를 통해 100만 개의 행이 INSERT가 되었음을 확인할 수 있다.

0개의 댓글