어흥

[CS] 데이터베이스 - Index 본문

CS/데이터베이스

[CS] 데이터베이스 - Index

라이언납시오 2020. 11. 24. 09:38
728x90
반응형

1. Index란?

: 수많은 데이터 중에서 원하는 자료를 빠르고 효율적으로 검색할 수 있도록 하는 자료구조

 

2. 특징

- 1개 혹은 여러개의 Column을 이용하여 생성될 수 있다

- 고속의 검색 동작 + 레코드 접근과 관련 효율적인 순서 매김 동작 제공

- [키 값, 주소] 형태로 저장되어 보통 테이블보다 적은 용량을 차지한다

- 대부분 B/B+ 트리의 구조를 가진다

 

2-1. 인덱스의 관리

DBMS는 index를 항상 최신의 정렬된 상태로 유지해야 원하는 값을 빠르게 탐색할 수 있다. 따라서 INSERT, UPDATE, DELETE가 수행된다면 각각 다음과 같은 연산을 추가적으로 해줘야하며, 그에 따른 오버헤드가 발생한다

INSERT: 새로운 데이터에 대한 인덱스를 추가한다
DELETE: 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행한다
UPDATE: 기존의 인덱스를 사용하지 않음 처리하고, 갱시된 데이터에 대해 인덱스를 추가한다

 

3. 사용하는 경우

- 데이터의 양이 많고 검색이 변경보다 빈번한 경우

- 인덱스를 걸고자 하는 필드의 값이 다양한 값을 가지는 경우

 

4. 생성 코드

//1. 단일 Column 설정
CREATE UNIQUE INDEX S_IDX		//S_IDX라는 유니크 인덱스 생성->중복값 불가
ON STUDENT(SID ASC);			//[학생] 테이블에서 학번을 기준으로 오름차순 정렬

//결과 형태
[학번, 주소]

//2. 다수 Column 설정
CREATE INDEX SNAME_SLOC			//SNAME_SLOC INDEX생성
ON STUDENT(S_NAME, S_LOC);		//STUDENT 테이블에서 학생의 이름과 주소를 저장하는 INDEX 생성 

//결과 형태
[이름, (학생의)주소, 주소]

 

5. 주의사항

1) [A,B,C] 로 인덱스가 잡혀있을 때

- A,C 를 조회할 때 인덱스를 태운다

- B,C 를 조회할 때 인덱스를 태우지 못한다

 

2) AND 연산자는 ROW수를 줄이지만, OR 연산자는 비교해야 하는 ROW가 늘어나서 FULL TABLE SCAN이 발생할 확률이 높다

 

3) COLUMN 값을 그대로 사용해야 한다

INDEX로 SALARY가 잡힌 경우
//INDEX 타는 경우
SELECT * FROM EMPLOYEE WHERE SALARY > 15000/10;

//INDEX 타지 않는 경우
SELECT * FROM EMPLOYEE WHERE SALARY*10 > 15000;

 

[참고 블로그]

- https://mangkyu.tistory.com/96

 

728x90
반응형

'CS > 데이터베이스' 카테고리의 다른 글

[DB] E-R Diagram  (0) 2021.09.15
[CS] 데이터베이스 - 요약  (2) 2021.09.02
[CS] 데이터베이스 - DBMS  (0) 2020.11.20
[CS] 데이터베이스 - Transaction  (0) 2020.10.19
[CS] 데이터베이스 - 정규화  (0) 2020.09.18
Comments