어흥
[CS] 데이터베이스 - Index 본문
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