1️⃣ 인덱스란 무엇인가
인덱스의 가장 큰 목적은 대용량 데이터 조회 시 select문의 조회 속도
를 향상시키는 것입니다. 이를 위해서 Insert, Update, Delete문의 성능을 희생시키는 측면도 있습니다.
대용량 데이터가 아니라면 인덱스의 메리트가 크지 않을 수 있습니다.
인덱스의 장점
Full Scanning에 비해서 테이블을 조회하는 속도를 크게 향상시킬 수 있습니다.
인덱스의 단점
인덱스를 유지하기 위한 별도 저장 공간
이 필요합니다. (테이블의 10% 정도), 또한 카디널리티
나 여러 요인들을 고려하여 인덱스를 생성하지 않으면 오히려 성능이 저하되는 현상이 발생할 수 있습니다.
2️⃣ Clustered Index
클러스터드 인덱스
는 테이블당 하나만 생성할 수 있으며, 키 값에 의한 동등 및 범위 검색 모두에 유리합니다. 테이블의 데이터가 키 값에 따라 정렬된 형태로 저장되어 있어 특정 값을 쉽게 찾을 수 있으며 범위로 검색한다고 해도 이미 정렬되어 있으므로 손쉽게 검색할 수 있습니다. 또한 인덱스 페이지가 단순해져 넌클러스터드 인덱스에 비해 차지하는 공간도 작습니다. 클러스터드 인덱스는 테이블 생성 시 기본키를 생성하면 자동으로 생성됩니다.
3️⃣ Non-Clustered Index
넌클러스터드 인덱스
는 테이블 당 여러개를 만들 수 있습니다. (복합키도 가능) 테이블 자체가 정렬되지는 않고, 인덱스 페이지만 정렬됩니다.
인덱스의 리프노드가 데이터가 아니라 데이터가 위치하는 포인터이기 때문에 클러스터드 인덱스보다 검색 속도는 느리지만 데이터의 입력, 수정, 삭제는 더 빠릅니다.
인덱스를 생성할 때 데이터 페이지는 그냥 둔 상태에서 별도의 페이지를 따로 만들기 때문에 클러스터드 인덱스보다 저장공간이 더 필요합니다.
4️⃣ Clustered Index와 Non-Clustered Index 함께 사용
클러스터드 인덱스와 넌클러스터드 인덱스를 같이 사용하는 경우, 넌클러스터드 인덱스로 찾고자 하는 데이터의 PK를 검색한 뒤, 클러스터드 인덱스로 데이터 값을 찾는 형태입니다. 이렇게 하는 이유는 클러스터드 인덱스에 저장된 데이터의 순서를 가능한 유지하면서 데이터의 삽입과 삭제에 대한 인덱스 관리 비용을 줄이기 위해서
입니다.
5️⃣ 인덱스 생성시 고려할 것
인덱스는 데이터 검색을 빨리하기 위해 사용합니다. 하지만 인덱스를 생성했다고 데이터 검색이 무조건 빨라지는 것은 아닙니다.
- 인덱스는 where 절에 자주 사용되는 속성이어야 합니다.
- 인덱스는 조인에 자주 사용되는 속성이어야 합니다.
- 단일 테이블에 인덱스가 많으면 속도가 느려질 수 있습니다. (인덱스 유지 비용)
- 속성이 가공되는 경우 사용하지 않습니다. (속성 그대로를 where절에 사용해야 한다)
- 속성의 카디널리티가 낮을 때 유리합니다
Reference
https://mangkyu.tistory.com/96
https://mozi.tistory.com/320
MYSQL로 배우는 데이터베이스 개론과 실습, 한빛 아카데미
Uploaded by Notion2Tistory v1.1.0