본문 바로가기

DataBase/DBMS

12-1.인덱스

Why 인덱스?

: FULL SCAN 안 하도록 하자!!!!

- 성능 향상 (B*tree 구조)

- 일정한 검색 속도를 유지 시켜준다 (자동으로 b*tree 형태로 균형화 하기 때문에)

(-primary 키만 생성해줘도 기본적인 index는 생성이 된다 또 다른 컬럼에 대해서도 인덱스 생성 가능!!)

 

: 컬럼 속에 있는 레코드 하나하나에 인덱스를 하나 만들어줘서 각각의 값에 대하여 해당하는 ROWID값에 다 주소값을 만들어놓는다

 

인덱스 생성 방법

CREATE INDEX 테이블이름_인덱싱하고자는컬럼명_idx on 테이블이름(컬럼명);

 

CREATE TABLE BOARD(
  SEQ NUMBER PRIMARY KEY,
  TITLE VARCHAR2(50),
  WRITER VARCHAR2(50),
  CONTENTS VARCHAR2(200),
  REGDATE DATE,
  HITCOUNT NUMBER
)

INSERT INTO BOARD VALUES(1,'A1','A','A',SYSDATE,0);
INSERT INTO BOARD VALUES(2,'A2','A','A',SYSDATE,0);
INSERT INTO BOARD VALUES(3,'A3','A','A',SYSDATE,0);
INSERT INTO BOARD VALUES(4,'A4','A','A',SYSDATE,0);
INSERT INTO BOARD VALUES(5,'A5','A','A',SYSDATE,0);
INSERT INTO BOARD VALUES(6,'A6','A','A',SYSDATE,0);
INSERT INTO BOARD VALUES(7,'A7','A','A',SYSDATE,0);
INSERT INTO BOARD VALUES(8,'A8','A','A',SYSDATE,0);
INSERT INTO BOARD VALUES(9,'A9','A','A',SYSDATE,0);
INSERT INTO BOARD VALUES(10,'A10','A','A',SYSDATE,0);

select * from board where title='A7'; 

create index board_title_index
  on board(title);

select * from board where title='A7'; 



인덱스 보충

 

F10 키 눌러주면-계획설명

1. 인덱스 ( INDEX ) 정의

primary key 를 검색할 때는 내부적으로 index라는 것을 가지고

있어서 빨리 검색할 수 있도록 도와준다. (속도 up!)

ROWID를 저장하고 관리함.

모든 데이터를 읽어서 검색하면 FULL SCAN

2.인덱스 만들기

CREATE INDEX 만들고자하는인덱스명

ON 있는테이블(DATA);

 

CREATE INDEX EMP_ENAME_IDX

;ON EMP(ENAME);

확인하는 것(비교 FULLSCAN, INDEX)

-FULL SCAN 시 설명

 

-인덱스 만든 후 검색

 

3.인덱스 사용하지 않는 경우

 

1.조건문에 NOT 부정문

2.NULL 관련 IS NULL, IS NOT NULL

3.컬럼 변형(TO_NUMBER 같은)