🥞 BE
home

인덱스 전용 스캔 대신 힙 인덱스 스캔을 사용하는 이유

Date
2024/06/16
Category
DB
Tag
MySQL
Detail
DB Engineering
count. 힙으로 이동하는 비용이 높다. 힙으로 이동하면 테이블의 페이지와 모든 열을 가져와야 하기 때문이다.

인덱스 전용 스캔(= 커버링 인덱스 스캔) vs 힙 인덱스 스캔

인덱스 전용 스캔은 필요한 모든 데이터가 인덱스에 포함되어 있어, 인덱스만으로 쿼리를 처리할 수 있는 경우에 사용된다. 이 방식은 힙을 읽을 필요가 없어 성능이 매우 뛰어나다. 그러나 쿼리에서 요구하는 데이터가 인덱스에 모두 포함되지 않은 경우에는 힙 인덱스 스캔을 사용해야 한다.
힙 인덱스 스캔은 인덱스만으로는 쿼리에서 필요한 모든 데이터를 얻을 수 없을 때 사용된다. 인덱스를 사용하여 데이터의 위치를 찾고, 힙에서 실제 데이터를 가져오는 방식이다. 이는 인덱스 전용 스캔에 비해 성능이 떨어지지만, 보다 완전한 데이터를 제공할 수 있다.
힙 인덱스 스캔은 쿼리에서 필요한 모든 데이터가 인덱스에 포함되지 않은 경우, 인덱스가 최신 상태가 아닌 경우, 복잡한 조건이 포함된 경우, 데이터가 지속적으로 수정되는 경우에 사용된다.
필요한 모든 데이터가 인덱스에 포함되지 않은 경우
인덱스 전용 스캔은 쿼리에 필요한 모든 데이터가 인덱스에 포함되어 있을 때만 사용할 수 있다. 그러나, 힙 인덱스 스캔은 인덱스를 통해 검색된 후, 힙(테이블)에서 추가 데이터를 가져와 필요한 모든 컬럼을 제공할 수 있다.
인덱스가 최신 상태가 아닌 경우
인덱스는 가끔 테이블의 데이터를 반영하지 못할 수 있으며, 이런 경우에는 힙에서 최신 데이터를 읽어와야 한다.