1. Index 란
색인, 빨리 찾기 위한 자료구조, 추가적인 작업공간과 저장공간을 할당한다.
데이터와 데이터의 위치를 저장
2. 장점
select
update
delete
성능이 향상된다
인덱스를 사용하지 않는 컬럼을 조건절에 검색시, 해당 테이블을 full scan 한다
시스템 부하를 줄일 수 있다
3. 단점
인덱스를 관리하기 위한 추가적인 공간 (약 10%) 이 필요하다
추가 작업이 필요하다
인덱스를 잘못 사용하는 경우 오히려 성능이 저하된다
-> 테이블 rows가 적은 경우는 인덱스를 타고 찾는게 오히려 느려짐
-> update, delete의 경우 데이터를 삭제해도 기존의 인덱스는 삭제하지 않고, '사용하지 않음' 처리를 해주기 때문에, 만약 update, delete가 빈번하게 발생하는 테이블의 경우, 실제데이터는 10만건이지만 인덱스는 100만건이 넘어가서 성능이 저하될 수 있음
4. 예시
title 컬럼에 인덱스를 걸어둔 상황
- 전체 문자열을 =로 그대로 검색하는 경우 -> 인덱스 탐
- LIKE 검색하는 경우 -> 인덱스 못탐
- title 컬럼자체를 연산하여 검색하는 경우 -> 인덱스 못탐
5. 인덱스 사용 권장하는 경우
- 규모가 큰 테이블
- insert, update, delete 가 자주 발생하지 않는 컬럼
- join이나 where 또는 order by에 자주 사용되는 컬럼
- 데이터의 중복도가 낮은 컬럼
6. 인덱스 자료구조
1) 해시테이블
(key, value)로 저장
빠른 데이터 검색에 유용
등호(=) 연산에만 특화되어 있다
부등호 연산(<, >) 불가능
2) B+Tree
DB의 인덱스를 위해 자식노드가 2개 이상인 B-Tree를 개선시킨 자료구조
리프 노드(데이터노드)만 인덱스와 함께 데이터를 가지고 있고, 나머지 노드 (인덱스 노드)들은 데이터를 위한 인덱스(Key)만 갖는다
리프노드들은 linkedList로 연결되어 있다
데이터 노드 크기는 인덱스 노드의 크기와 같지 않아도 된다
좀더 정리 필요
'programming' 카테고리의 다른 글
OOP(Object Oriented Programing) 객체지향 프로그래밍 (0) | 2022.10.04 |
---|---|
[DB] 테이블간의 관계성 만들기 (0) | 2022.05.20 |
[DB] 문자형 컬럼을 탐색하는 방법 (0) | 2022.05.20 |
[DB] 집계함수 종류와 각각의 역할 (0) | 2022.05.19 |
[DB] CREATE 로 테이블 만들고 INSERT 해보기 (0) | 2022.05.19 |