14.1

인덱스는 데이터베이스에서 효율적인 질의 처리를 위한 중요 요소다. 인덱스가 없다면, 모든 질의는 사용하는 모든relation의 전체 내용을 읽어야 하며(seq scan), 이러한 방식은 몇 개의 레코드만 요구하는 질의에 대해 매우 비효율이다.

14.2

인덱스 순차 파일(index-sequential file): search key에 대해 기본 인덱스를 가지는 파일로, search key의 값에 따라 연속적인 순서로 레코드가 정렬되어 있다.


한 search key에 대한 모든 index entries는 한 sequential file(index file)로 저장된다. ⇒ index file은 search key 순서에 따라 index entries가 연속적으로 저장된 sequential file이다.


[13장] sequential file

(정의)

(현실)

[참고] 한 file에 속하는 여러 block은 물리적으로 연속적으로 저장되어 있지 않을 수 있다. (즉, random access를 가정한다.)


multilevel index에서 각 level index는 하나의 file, 한 개 이상의 block에 저장된다.


<aside> 📌

sequential scan: 파일에 저장된 레코드를 블록 단위로 차례대로 읽는 방식

</aside>

데이터를 물리적 저장 순서대로 읽으며, 반드시 정렬된 순서대로 읽는 것은 아니다. 정렬이 필요한 경우에는 추가적인 정렬 작업이 필요하다. 🤖

  1. 저장 순서와 정렬 순서의 차이: Sequential Scan은 데이터를 디스크에 저장된 물리적 순서대로 읽습니다. 이 물리적 순서는 레코드가 삽입된 순서일 수 있지만, 데이터가 특정 기준으로 정렬되어 있다는 보장은 없습니다. 따라서 레코드가 특정 열(예: ID, 날짜 등) 기준으로 정렬된 순서대로 읽히려면, 데이터를 삽입할 때 해당 기준으로 정렬해 저장해야 합니다.
  2. 인덱스가 없을 경우: Sequential Scan은 인덱스가 없는 경우 전체 테이블을 블록 단위로 읽는 방식이므로, 정렬되지 않은 레코드를 순차적으로 읽게 됩니다. 이 경우 데이터는 삽입된 순서대로 또는 블록 단위로 읽히기 때문에 정렬된 순서가 아닙니다.
  3. 정렬된 순서가 필요한 경우: 만약 레코드를 특정 순서대로 읽고 싶다면, Sequential Scan이 아닌 **인덱스 스캔(Index Scan)**을 사용하거나, Sequential Scan 후 **정렬 작업(ORDER BY)**을 수행해야 합니다. 인덱스 스캔은 특정 인덱스에 기반해 데이터를 읽으므로, 인덱스가 특정 열을 기준으로 정렬되어 있다면 해당 순서대로 데이터를 읽을 수 있습니다.
  4. 클러스터링 인덱스: 클러스터링 인덱스가 설정된 경우, 데이터가 인덱스 키 값에 따라 실제 저장될 때 정렬됩니다. 이런 경우에는 Sequential Scan이 그 인덱스 순서에 따라 정렬된 데이터에 가까운 결과를 읽을 수 있지만, 클러스터링 인덱스가 없는 경우에는 물리적 저장 순서에 따라 비정렬된 상태로 읽히게 됩니다.

14.3

index-sequential file 구조의 주요 단점은 "파일이 커질수록" 인덱스를 찾아서 그 "데이터를 연속으로 스캔하는 성능이 감소"하는 것이다.