- Index 란 무엇인가
- Index 의 자료구조
- Primary index vs Secondary index
- Composite index
- Index 의 성능과 고려해야할 사항
Index란 ?
- 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스안에
테이블의 검색 속도를 향상
시키기 위한 자료구조 - 칼럼의 값과 해당 레코드가 저장된 주소를 키와 값의 쌍으로 인덱스를 만들어서 사용함
- CREATE시에 추가 인덱스와 이에 해당하는 값이 저장됨
- UPDATE는 기존 인덱스를 계속 사용할거라 생각하지만 아님. 변경이 일어나면 기존 인덱스를
사용하지 않음
상태로 두고 새로운 인덱스를 부여해서 값을 저장함 - DELETE는 기존 인덱스를 삭제하지 않고
사용하지 않음
상태로 만듦- 왜 기존거를 사용하지 않고 새로 부여하는지와 삭제시에는 왜 바로 삭제하지 않는지 궁금점이 생길 수 있음
- 해시 테이블의 이유는 성능최적화, 트랜잭션의 용이성, 데이터복구의 용이성 등이 있음
- b+ tree의 이유도 위와 비슷함. 다른점은 트리를 재조정 해야하기 때문에 즉각적인 삭제는 오버헤드가 큼. 따라서 피크 타임이 아닌 시간에 관리자가 수동으로 일괄처리 하거나, 시스템 내부에서 함
- 추가적으로 해시는 등가 검색에 유리하고 트리는 범위 검색에 유리함
- 등가: 하나 찾기
- 범위: 범위로 찾기
- 추가적으로 자료 찾기
- 인덱스에 추가적인 공간이 사용되는데 이럼에도 사용되는 이유(트레이드 오프)
- Data warehouse에서도 index기능을 사용하는지?
Primary Index vs Secondary Index
- Primary Index(영어 사전)
- Index가 정렬된 기준이 실제 물리적 데이터가 정렬된 기준과 일치
- 실제 데이터가 정렬되어 있기에 sequential scan이 효율적
- 데이터가 순서대로 정렬되어 있기 때문에 range query에 유리
- dense
- 1:1 맵핑
- sparse
- 대표값만 맵핑 (1로 들어가서 1~100 맵핑)
- Secondary Index
- Index가 정렬된 기준과 실제 물리적 데이터가 정렬된 기준과 일치하지 않음
- Range query를 수행할 수 있지만 비효율적
- Composite Index
- 두 개 이상의 컬럼을 결합하여 생성된 인덱스임
- 여러 필드를 기반으로 데이터베이스 테이블에서 데이터를 빠르게 검색하고, 검색 쿼리의 성능을 향상시키기 위해 사용됨
4. 인덱스 고려사항
- 인덱스 관리 비용: 데이터 삽입, 삭제, 수정 작업이 자주 발생하는 테이블에 대한 인덱스는 성능 저하를 초래할 수 있습니다. 이는 인덱스가 변경될 때마다 추가적인 작업을 수행하기 때문
- 저장 공간 사용: 인덱스는 추가적인 디스크 공간을 차지함 따라서 불필요한 인덱스는 공간 낭비를 할 수 있음
- 선택적 사용: 모든 컬럼에 인덱스를 사용하는 것이 아니라 조회에 자주 사용되는 컬럼에 한정하여 인덱스를 적용하는 것이 효과적임
- 인덱스 설계: 복합 인덱스를 포함하여 인덱스를 설계할 때는 쿼리 패턴을 면밀히 분석하고 데이터의 특성과 어플리케이션의 요구 사항을 고려해야 함