[인덱스(index)란]
데이터베이스 검색 속도를 높이는데 사용되는 자료구조 이다.
인덱스(index)는 책 뒤에 있는 색인 같은 것이다.
찾아야 할 내용이 있을 때 색인을 보고 해당 페이지로 가서 원하는 정보를 얻을 수 있다.
만약 색인이 없다면 책 첫 페이지부터 마지막 페이지까지 모두 넘겨봐야 한다.
[인덱스 설정에 따른 실행 계획]
인덱스가 설정 되어 있지 않는 경우
인덱스가 없는 상태에서 데이터를 조회하게 되면 Full Table Scan을 하게 된다.
인덱스가 설정 되어 있는 경우
[인덱스의 관리]
인덱스는 항상 최신의 정렬 상태를 유지해야 원하는 값을 빠르게 탐색 할 수 있다.
따라서 인덱스가 적용된 컬럼에 변경 작업이 있다면 연산을 추가적으로 해주어야 하므로 이에 따른 오버해드가 발생한다.
- INSERT : 새로운 데이터에 대한 인덱스를 추가한다.
- DELETE : 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업을 진행한다.
- UPDATE : 기존의 인덱스를 사용하지 않음 처리하고, 갱신된 데이터에 대해 인덱스를 추가함
[인덱스의 문제점]
만약 MySQL관련 책의 찾아보기에 MySQL이라는 단어가 등록되어 있다고 한다면 MySQL 단어가 사용된 모든 페이지가 색인에 적혀있을 것이다.
만약 찾아보기에 실린 단어가 모두 이런식이라면 찾아보기의 분량이 엄청 많아질 것이다.
찾아보기에 있는 페이지를 하나하나 보면서 MySQL 단어가 들어간 페이지를 찾는 것보다 앞에서부터 읽어나가는 것이 더욱 효율적일 수 있다.
실제 데이터베이스에도 필요 이상의 인덱스를 생성하게 되면 데이터베이스에서 차지하는 공간만 늘어나고 인덱스를 이용해서 데이터를 찾는 것이 전체 테이블을 찾아보는 것보다 훨씬 느릴 수 있다.
[인덱스의 장점과 단점]
장점
- 조회 속도를 향상할 수 있다.
- 검색에 대한 쿼리 부하를 줄여 성능을 향상 시킬수 있다.
단점
- 인덱스를 저장할 공간이 필요하며 DataBase 크기의 10% 정도 추가공간이 필요하다.
- 처음 생성시 많은 시간을 소요된다.
- 변경이 빈번한 속성에 인덱스를 만들면 인덱스의 크기가 비대해져서 성능이 오히려 저하되는 역효과가 나타난다.
[인덱스를 사용하면 좋은 경우]
- 규모가 작지 않은 테이블
- 변경이 잦지 않은 테이블
- JOIN이나 WHERE절, ORDER BY에 자주 사용한다.
- 데이터의 중복도가 낮은 컬럼
- 인덱스는 내부적으로 key-value의 트리형태 인데 여기서 key가 중복이 되면 검색 대상이 증가하기 때문이다.
[인덱스의 종류]
클러스터형 인덱스(clustered index)
- 테이블당 하나만 생성할 수 있다.
- 행 데이터를 인덱스로 지정한 열에 맞춰 자동으로 정렬한다.
비클러스터형 인덱스(non-clustered index)
- 테이블에 여러개 생성할 수 있다.
Reference
인덱스 뜻, 작동 과정, 장단점, 특징
https://mangkyu.tistory.com/96
'데이터베이스' 카테고리의 다른 글
INNER JOIN과 OUTER JOIN (0) | 2022.08.29 |
---|---|
DB 트랜잭션(Transaction)과 트랜잭션 격리 수준(Isolation Level) (0) | 2022.08.22 |