순차I/O 개념 자체가 물리적뿐만 아니라

논리적으로 순차적으로 읽는 것도 순차I/O임

인덱스 리프블록을 연결리스트 따라서 쭉 읽는 것도 순차I/O에 해당


클러스터링 인덱스는 범위검색(>=)에 특화되어있음

secondary 인덱스는 범위검색시 많은 테이블 액세스가 발생할 수 있는데

클러스터링 인덱스는 리프노드에 칼럼 다 있으니까 테이블 액세스 필요X


select *

from t

where id >= 100 


secondary 인덱스 리프노드 1개에 데이터 100개씩 저장

클러스터링 인덱스 리프노드 1개에 데이터 100개씩 저장을 가정함

위 조건 만족하는 레코드는 1000건


secondary 인덱스 (id, rowid)로 저장해놓았다면

인덱스 리프노드를 순차적으로 (레코드 100개 * 10노드)

읽고 이후 1000건에 대해

테이블 랜덤 액세스가 최대 1000번 일어남(물론 이보다는 적음)


클러스터링 인덱스의 경우 

리프노드 10건만 읽고 바로 결과 반환함


정리하면

secondary 인덱스는 인덱스 스캔과정에서 10건

테이블 액세스 과정에서 최대 1000건 -> 1010 I/O 발생

클러스터링 인덱스는 리프노드 10건 I/O 발생


물론 클러스터링 인덱스면 리프노드에 칼럼들 다 박아놔서

secodary 인덱스에 비해  리프노드 1개에 들어갈 수 있는 레코드가 적음

그래서 리프노드 스캔과정에서 조금 더 I/O가 발생할 수는 있는데

테이블 액세스를 안하니까 범위스캔(>=)에 유리하다고 보면됩니다