인덱스란?
데이터베이스 인덱스는 데이터베이스의 효율적인 검색 및 데이터 접근을 지원하기 위해 사용되는 자료 구조다. 인덱스는 테이블의 컬럼 또는 컬럼의 조합에 대한 정렬된 데이터 구조로, 검색 속도를 향상시키고 데이터 접근 시간을 줄여준다.
인덱스는 데이터를 빠르게 찾을 수 있는 하나의 장치라고 볼 수 있다. 즉 메모리 영역의 일종의 목차를 생성하는 개념이다.
B - Tree
인덱스는 보통 B - Tree라는 자료 구조로 이루어져 있다.
B - Tree는 루트 노드, 리프 노드 그리고 루트 노드와 리프 노드 사이에 있는 브랜치 노드로 나뉜다.
트리 탐색은 맨 위 루트 노드부터 탐색이 일어나며 브랜치 노드를 거쳐 리프 노드까지 내려온다. 위의 그림처럼 이렇게 루트 노드부터 시작하여 마지막 리프 노드에 도달해서 결과값을 반환하게 된다.
MySQL에서의 인덱스
MySQL에서의 인덱스는 MySQL Index 파일에 저장된다. 다만 조회속도는 빨라지지만 UPDATE, INSERT, DELETE 시의 속도는 저하된다는 단점이 있다.
-- 단일 인덱스
CREATE INDEX 인덱스이름 ON 테이블이름(필드이름1)
-- 다중 컬럼 인덱스
CREATE INDEX 인덱스이름 ON 테이블이름(필드이름1, 필드이름2, ...)
인덱스를 생성하는 방법은 위와 같다.
인덱스 최적화 기법
1) 인덱스는 두 번 탐색하도록 강요한다. 인덱스 리스트, 컬렉션 순으로 탐색하기 때문에 관련 읽기 비용이 들게 된다. 또한, 컬렉션이 수정되었을 때 인덱스도 수정되어야 한다. 이 때 B - Tree의 높이를 균형있게 조절하는 비용과 분산시키는 비용이 들게 된다. 그렇기 때문에 쿼리에 있는 필드에 인덱스를 무작정 다 설정하는 것은 답이 아니다. 컬렉션에서 가져와야 하는 양이 많을수록 인덱스를 사용하는 것은 비효율적이다.
2) 보통 여러 필드를 기반으로 조회할 때 인덱스를 생성하는데, 인덱스를 생성하는 순서가 있고 그 순서에 따라 성능이 달라지게 된다. 그 기준은 다음과 같다
- 같음을 비교하는 쿼리가 있다면 제일 먼저 인덱스로 설정한다.
- 정렬에 쓰는 필드라면 그 다음 인덱스로 설정한다
- 다중 값을 출력해야하는 필드라면 나중에 인덱스를 설정한다.
- 값이 유니크한 필드에 인덱스를 먼저 생성한다.
인덱스의 장단점
장점 | 단점 |
|
|
요약하면, 인덱스는 데이터베이스의 검색 및 정렬 성능을 향상시키는 데 도움을 주지만, 추가적인 디스크 공간을 요구하고 데이터 변경 작업에 대한 오버헤드가 발생할 수 있다. 따라서 인덱스를 사용할 때는 상황에 맞게 최적화하고 관리해야 한다.
'개발자의 기본 소양 > DATABASE' 카테고리의 다른 글
Transaction ACID & Integrity(무결성) (0) | 2023.05.31 |
---|---|
Database Schema (데이터베이스 스키마) (0) | 2023.03.29 |
DATABASE(6) - Database Server, Database Client (0) | 2022.12.03 |
DATABASE(5) - 관계형 DB의 핵심 기능 JOIN (0) | 2022.12.03 |
DATABASE(4) - Relational DATABASE (0) | 2022.11.26 |