DB에서 테이블의 데이터 레코드를 저장하는 방식
- clustered index
- PK가 clustered index 임
- 데이터는 물리적으로 clustered index의 순서대로 정렬되어 저장된다.
- 탐색 속도가 non-clustered index에 비해 빠르다.
- 삽입, 삭제는 데이터의 물리적인 순서가 바뀌기 때문에 non-clustered index 보다 느리다.
- clustered index는 테이블 당 하나만 가질 수 있다.
- non-clustered index
- 무결성 제약조건이 걸린 복합키가 non-clustered index에 해당된다.
- 테이블 당 여러개를 가질 수 있다.
- 인덱스에는 인덱스를 건 컬럼과 데이터의 주소를 가지고 있다.
- 인덱스를 적용한 컬럼을 기준으로 새로운 테이블이 생성된다. 그 컬럼을 기준으로 정렬되고 실제 데이터의 주소를 가지고 있다.
요약: clustered index는 데이터가 물리적으로 정렬되어서 저장된다. PK가 해당된다. 디스크에 B+tree 구조로 저장된다.
non-clustered index는 인덱스를 건 컬럼을 기준으로 정렬되어 있고 실제 데이터는 정렬되어 있지 않고 데이터 주소를 갖고 있다.
MySQL의 InnoDB의 clustered index의 리프노드에는 실제 데이터 레코드가 있다.
커버링 인덱스란?
쿼리에서 사용되는 모든 컬럼이 인덱스에 포함된 것 (select, where, order by, group by 에 사용되는 모든 컬럼이 인덱스에 포함된 것)
인덱스에 쿼리에 사용되는 컬럼이 있으므로 데이터 레코드까지 접근할 필요가 없어서 I/O가 발생하지 않으므로 성능이 향상된다.
B+tree 와 B-tree의 차이?
참고: https://www.geeksforgeeks.org/difference-between-clustered-and-non-clustered-index/
https://jojoldu.tistory.com/476