들어가며
인덱싱이라는 개념을 들어보기만 했다 . . 이론으로만 알았다 . .
인덱스
데이터를 빠르게 찾을 수 있는 하나의 장치이다.
도서의 색인이나 사전과 같이 데이터를 쉽고 빠르게 찾을수있도록 만든 데이터 구조.
인덱스는 흔히 B-TREE 라는 자료 구조로 이루어져 있다.
인덱스가 효율적인 이유
균형 잡힌 트리구조, 선형적으로 증가하는 대수확장성 때문이다.
인덱스를 만드는 방법
클러스터형 인덱스
- 테이블 당 하나 설정할 수 있다.
- primary key 옵션으로 기본키를 만들면 생성가능하다.
- unique not null 옵션으로 클러스터형 인덱스를 만들 수 있다.
세컨더리 인덱스
- 빈번하게 처리되는 질의문에서 WHERE 절 이후 조건을 인덱스화
클러스터 인덱스
- 기본키에 대하여 클러스터 인덱스를 생성한다
- 기본키 지정없으면 UNIQUE 속성에 대해 클러스터 인덱스 생성
- 기본키,UNIQUE 없으면 자체 생성 행번호로 클러스터 인덱스 생성
보조 인덱스
- 클러스터 인덱스가 아닌 모든 인덱스는 보조 인덱스
- 보조인덱스 각 레코드는 속성과 키본키 속성값을 갖고 있다.
- 보조인덱스 검색해서 기본키 속성 찾은 후 클러스터 인덱스로 가 해당 레코드를 찾는다.
- 특정키 값 찾는 검색은 성능 보장하지만, 범위검색은 보장 못함
보조 옵션으로 기본키 생성
현재 100개의 member 중 image로 find 해보았는데
image에 대한 인덱스를 걸었더니 조금 향상된 모습을 보인다.
인덱스는 무조건 좋은가 ?
인덱스 자체 역시 하나의 데이터 덩어리 이기 때문에, 데이터베이스에 전체 크기의 10%나 되는 추가적인 공간을 할당해줘야 하고, 잘못 사용할 경우 성능이 오히려 크게 떨어질 수 있다는 단점이 있다. (ex. 변경 작업이 자주 일어나는 경우, 인덱스가 적절하지 않은 경우)
클러스터 인덱스와 보조 인덱스 차이
위의 예시에서는 unique한 값이 id 외에 존재하지 않아 보조 인덱스로 설정하였다.
- 클러스터형 보다 검색 속도는 더 느리지만 데이터의 입력/수정/삭제는 덜 느리다.
- 보조 인덱스는 여러 개 생성할 수 있다. 그러나 함부로 사용할 경우에는 오히려 성능을 떨어뜨릴 수 있다.
인덱스 최적화 기법
인덱스는 두번 탐색한다. 인덱스 리스트, 컬렉션 순으로.
그래서 읽기 비용이 든다.
컬렉션이 수정되었을 때 인덱스도 수정해야한다. B트리 높이를 균형있게 조절하며, 데이터를 효율적으로 조회할 수 있도록 분산하는 비용도 든다.
여러 필드를 기반으로 조회 시 복합 인덱스를 생성하는데, 이는 순서가 있고 이에 따라 성능이 달라진다.
- 같음 을 비교 하는 값
- 정렬에 쓰는 필드
- 다중 값을 출력해야 하는 필드
- 유니크한 값의 정도가 높은 필드
'Database' 카테고리의 다른 글
[Database] 스프링과 트랜잭션 (0) | 2023.08.06 |
---|---|
[Database] 정규화 과정 (0) | 2023.08.06 |
[Database] 동시성 제어 (1) | 2023.02.17 |
[Database] 회복 (0) | 2023.02.16 |
[Database] 정규화 (0) | 2023.02.13 |