데이터베이스 테이블에 대한 검색의 속도를 높여주는 자료 구조
데이터베이스에서 특정 컬럼에 인덱스를 생성하면 해당 컬럼의 데이터들을 정렬하여 컬럽값과 실제 데이터가 저장된 주소를 <키값,주소값> 형태로 저장한다.
책에 있어서 목차,색인 과 같다고 생각하면 된다. 책에서도 목차를 통해서 쉽게 원하는 키워드를 찾을 수 있듯이 데이터 베이스에서도 인덱스를 통해서 원하는 데이터를 빠르게 찾을 수 있다.
→ 데이터 = 내용 , 인덱스 = 목차 , 데이터주소 = 페이지
인덱스에 의해 데이터들이 항상 정렬된 상태를 갖는다.
- where 조건 절 검색이 효율적이다.
- order by에 의한 sort 과정을 피할 수 있다.
- Min, Max의 효율적인 처리가 가능하다.
→ 테이블을 조회하는 속도와 그에 따른 성능을 향상시킬 수 있고 전반적인 시스템의 부하를 줄일 수 있다.
- 인덱스를 관리하기 위하여 추가적인 공간(데이터베이스의 약 10%)과 비용이 발생한다.
- select를 제외한 DML에 취약하다.
INSERT : 새로운 데이터에 대한 인덱스를 추가
DELETE : 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업 수행
UPDATE : 기존의 인덱스를 사용하지 않음 처리, 갱신된 데이터에 대한 인덱스 추가
→ 기존의 인덱스를 삭제하지 않고 사용하지 않음 처리를 해서 자료가 비대해져 오히려 성능저하를 일으킴.
해시 인덱스는 검색하고자 하는 값을 입력한 후 그 결과와 Bucket의 내용을 비교하여 해당 데이터 레코드의 위치를 찾을 수 있는 기법이다.
해시 테이블은 키(Key), 해시함수(Hash Function), 해시(Hash), 값(value), 저장소(Bucket, Slot)로 이루어져 있다.
장점
단점
B-tree를 개선 시킨 tree
leaf 노드를 데이터 엔트리라고 부르며, 그 외의 노드들은 인덱스 엔트리라고 불린다.데이터 엔트리는 <key,rid> 쌍으로 이루어져 있으며 rid는 record id의 약자이며, 실제 데이터 레코드의 주소를 갖고 있다.
데이터 레코드는 디스크에 있는 실제 데이터를 의미하고, 데이터 엔트리는 인덱스에 존재하는 하나의 노드라이다.
인덱스 엔트리는 <key,다음노드의포인터>로 구성되어 있다.
B-tree와의 차이점
B+tree의 구성 방법
leaf 노드를 어떻게 구성하느냐에 따라 달라진다.
- leaf노드 = <key,data record>
- leaf노드 = <key,rid>
- leaf노드 = <key,list of rid>
1. leaf노드 = <key,data record>
leaf 노드에 데이터 레코드가 직접 들어가 있기 때문에 인덱스파일만 확인해도 데이터를 가져올 수 있다.
2. leaf노드 = <key,rid>
가장 보편적인 b+tree 의 구조
leaf 노드에 rid(record id: 실제 디스크의 어디에 저장되어 있는지 포인터) 가 있어서 rid를 따라가서 원하는 데이터를 가져올 수 있다.
3. leaf노드 = <key,list of rid>
key값에 해당하는 데이터가 여러개 일때 사용한다.
멀티 칼럼 인덱스란, 키값이 하나의 필드로 구성되어 있는게 아니라 여러개의 필드로 구성되어 있다는 것이다.
위에서 <key,rid>로 데이터엔트리가 구성된다고 했었는데 여기서 key는 1개의 속성이었다(예를들면, 나이필드)
근데, 나이 필드 뿐만아니라 성별필드도 같이 묶어서 인덱스를 구축할수 있다는 것이다.
이렇게 멀티 칼럼 인덱스를 구축해 놓으면 다음과 같은 질의에 이 인덱스가 도움이 될 수 있다.나이 < 30 AND 성별 = "남자"
정적트리구조로 데이터를 추가 삭제 하여도 트리의 구조가 바뀌지 않는다. 페이지가 꽉 차면 오버플로우 페이지를 생성한다.
ISAM 트리구조에서는 오버플로우 페이지를 생성하는데 오버플로우가 발생 하였을때 삽입,삭제 연산은 B+tree 보다 빠르다.
하지만 오버플로우가 발생 할수록 데이터를 물리적으로 정렬하지 않기 때문에 탐색 연산에서는 느려지게 된다.
책의 페이지를 알고있어서 한번에 펼쳐서 내용을 보는것과 같다.
책의 목차를 보고 페이지를 찾아서 그 페이지로 이동하는것과 같다.
https://rebro.kr/167
https://coding-factory.tistory.com/746
https://simsimjae.tistory.com/241
https://velog.io/@emplam27
https://ssoonidev.tistory.com/48
https://junghn.tistory.com/entry/DB-클러스터-인덱스와-넌클러스터-인덱스-개념-총정리