
Index 란?
인덱스는 데이터베이스에서 테이블의 검색 속도를 높이기 위한 자료 구조 입니다. 인덱스는 테이블의 컬럼을 기반으로 만들어지며, 이를 사용하여 특정 데이터를 빠르게 찾을 수 있습니다.
일반적으로 인덱스는 B-트리나 해시 테이블과 같은 자료 구조를 사용하여 구현됩니다. B-트리 인덱스는 매우 일반적인 인덱스 유형으로, 테이블의 키 값이 정렬된 트리 구조를 사용하여 저장됩니다. 이 구조는 검색, 삽입 및 삭제 작업에 대해 매우 효율적입니다. 해시 인덱스는 테이블의 키 값을 해시 함수를 사용하여 저장하며, 빠른 검색 속도를 제공하지만 범위 검색이나 정렬 기능이 없습니다.
인덱스를 사용하면 특정 행을 검색하는 데 걸리는 시간이 줄어듭니다. 특히 대량의 데이터가 있는 경우 검색 성능을 향상시키는 데 매우 유용합니다. 그러나 인덱스는 테이블의 크기와 관련하여 저장 공간을 차지하므로 인덱스를 너무 많이 사용하면 데이터베이스 성능이 떨어질 수 있습니다. 또한 인덱스를 사용하면 데이터를 삽입, 수정 또는 삭제할 때 추가 작업이 필요하므로 데이터베이스 성능에 영향을 미칠 수 있습니다.
따라서 인덱스는 데이터베이스의 검색 성능을 향상시키는 데 매우 유용하지만, 사용에 주의해야 합니다. 적절한 인덱스를 사용하면 데이터베이스의 성능을 최적화할 수 있습니다.
Index Scan 종류
- Table Full Scan : 테이블 전체 탐색
- Index Unique Scan : 인덱스 수직 탐색
- Index Full Sacn : 인덱스 전체 탐색
- Index Range Scan : 인덱스 범위 탐색
- Index Skip Scan : 인덱스 스킵 탐색
Table Full Scan - 테이블 전체 스캔
전체 테이블의 모든 레코드를 검색하는 방식
Index Unique Scan
단 한건의 데이터를 찾을 때 사용하는 Scan 방식
- 루트 블록에서 시작해 브랜치 블록을 거처 리프블록까지 내려가 최종 데이터가 저장된 테이블 블록을 읽어 단 한건을 찾는다.
- unique Index 를 통해
=조건으로 탐색하는 경우
Index Range Scan
- 인덱스를 루트에서 수직 탐색하다가 리프 블록에 도달해 시작점을 찾고 필요한 범위 만큼 Scan 하는 방식
Index Full Scan
인덱스 루트에서 시작해 수평적으로 리프 블럭까지 스캔하는 방식