woowacourse-study / 2022-cs-plant

cs 씨앗을 심기 위한 repository 입니다.
7 stars 1 forks source link

인덱스 스캔 #15

Open hyeonic opened 2 years ago

hyeonic commented 2 years ago

인덱스 레인지 스캔

인덱스 레인지 스캔은 검색해야 할 인덱스의 범위가 결정되었을 때 사용하는 방식이다.

일반적인 세컨더리 인덱스인 경우 리프 노드 자체는 정렬되어 있지만 실제 데이터를 가리키는 레코드 주소는 레코드 한 건 단위로 랜덤 I/O가 일어난다. 인덱스를 통해 데이터 레코드를 읽는 작업은 비용이 많이 드는 작업으로 분류되는 이유이다.

쿼리가 필요한 데이터에 따라 3번 과정은 생략될 수 있다. 이것을 바로 커버링 인덱스라 한다. 커버링 인덱스로 처리되면 쿼리는 디스크의 레코드를 읽지 않아도 되기 때문에 랜덤 읽기가 상당히 줄어들고 성능이 빨라진다.

인덱스 풀 스캔

인덱스 레인지 스캔과 마찬가지로 인덱스를 사용하지만 인덱스 레인지 스캔과 달리 인덱스의 처음부터 끝까지 모두 읽는 방식을 인덱스 풀 스캔이라 한다.

일반적으로 인덱스의 크기는 테이블 크기보다 작으므로 직접 테이블을 처음부터 끝 까지 읽는 것 보다 인덱스만 읽는 것이 효율적이다. 쿼리가 인덱스에 명시된 컬럼만으로 조건을 처리할 수 있는 경우 주로 이 방식이 사용된다. 대신 인덱스 뿐만 아니라 데이터 레코드까지 모두 읽어야 한다면 절대 이 방식으로 처리되지 않는다.

이 방식은 인덱스 레인지 스캔보다 빠르지 않지만 테이블 풀 스캔보다 효율적이다. 인덱스 전체 크기는 테이블 자체의 크기보다는 훨씬 작기 때문에 인덱스 풀 스캔은 테이블 전체를 읽는 것 보다 적은 디스크 I/O로 쿼리를 처리할 수 있다.

인덱스의 효율적인 사용: 인덱스 레인지 스캔, 루스 인덱스 스캔 인덱스의 비효율적인 사용: 테이블 전체를 읽는 것, 인덱스 풀 스캔

예상 질문