728x90
인덱스 (INDEX)
- 추가적인 쓰기작업, 저장공간을 활용하여 테이블에 대한 동작 속도를 높여주는 자료구조
인덱스 장단점
- 테이블 조회속도와 성능을 향상시킬 수 있음 (검색에 최적화)
- 전반적인 시스템 부하를 줄임
- 인덱스 관리를 위한 추가 작업 필요, 인덱스를 관리하기 위해선 DB의 약 10% 해당하는 저장공간 필요
- 인덱스는 기본적으로 이진트리 검색을 사용하기 때문에 기본적으로 정렬이 되어있어서, 인덱스를 잘못 사용할 경우 오히려 성능 저하될 수 있음 (INSERT, DELETE, UPDATE가 자주 발생하는 테이블에 인덱스를 걸 경우 오히려 성능 저하)
인덱스 알고리즘
- Hash Table과 B+ Tree이 있지만 일반적으로 B+ Tree를 사용
B+ Tree 정의
- B-Tree 를 개선시킨 자료구조
- 키에 의해서 각각 식별되는 레코드의 효율적인 삽입, 검색과 삭제를 통해 정렬된 데이터를 표한하기 위한 자료구조
B+ Tree 특징
- 리프노드, 논리노드, 루트 노드로 구성되어 있음
- 리프노드는 인덱스와 함께 실제 데이터가 저장되는 노드를 가짐
- 논리노드는 리프노드까지의 경로 역할, 루트노드는 출발점노드이며 인덱스 Key만 가짐
- 리프노드는 서로 LinkedList로 연결되어 있음
인덱스 종류
- 클러스터 인덱스 : 테이블당 1개만 허용, 해당 컬럼기준으로 물리적으로 정렬 (물리적으로 정렬되서 리프노드가 필요 X, 추가적인 공간 X), PRIMARY KEY 설정시 자동으로 생성
- 논클러스터 인덱스 : 테이블 249개까지 생성 가능, 테이블의 페이지를 정렬하지 않고 새로운 공간을 할당, 많은 공간을 차지하게 됨, 종류로 단일인덱스와 복합인덱스가 논클러스터 인덱스에 포함됨
- 단일 인덱스 : 인덱스에 컬럼이 하나 걸린 경우
- 복합 인덱스 : 인덱스에 컬럼이 두개 이상이 걸린 경우
'DATABASE' 카테고리의 다른 글
[DB] REPLICATION(리플리케이션) (0) | 2021.11.13 |
---|---|
[DB] 쿼리 처리 과정 (0) | 2021.06.26 |
[DB] 샤딩 (0) | 2021.06.02 |
[DB] 트랜잭션 (0) | 2021.05.16 |
[MySQL] 쿼리 튜닝 기초 (0) | 2020.12.15 |