Open-Closed Principle

MySQL 인덱스 스캔(Index Scan) 본문

Programming/MySQL

MySQL 인덱스 스캔(Index Scan)

대박플머 2022. 5. 11. 22:09

Index Range Scan

  • 인덱스에서 조건을 만족하는 값이 저장된 위치를 찾는다. 이 과정을 인덱스 탐색(Index Seek)이라고 한다. 
  • 탐색된 위치부터 필요한 만큼 인덱스를 차례대로 쭉 읽는다. 이 과정을 인덱스 스캔(Index Scan)이라고 한다
  • 읽어 들인 인덱스 키와 레코드 주소를 이용해 레코드가 저장된 페이지를 가져오고, 최종 레코드를 읽어온다. 

 

Index Full Scan 

  • 인덱스의 처음부터 끝까지 모두 읽는 방식을 인덱스 풀 스캔이라고 한다. 대표적으로 쿼리의 조건절에 사용된 컬럼이 인덱스의 첫 번째 카럼이 아닌 경우 인덱스 풀 스캔 방식이 사용된다. 
  • 인덱스의 크기는 테이블의 크기보다 작으므로 직접 테이블을 처음부터 끝까지 읽는 것보다는 인덱스만 읽는 것이 효율적이다. 
  • 인덱스뿐만 아니라 데이터 레코드까지 모두 읽어야 한다면 절대 이 방식으로 처리되지 않는다. 

예) 인덱스는 (A, B, C)칼럼의 순서로 만들어져 있지만 쿼리의 조건절은 B 칼럼이나 C 칼럼으로 검색하는 경우다. 

 

Loose Index Scan 

  • 루스 인덱스 스캔은 인덱스 레인지 스캔과 비슷하게 작동하지만 중간에 필요치 않은 인덱스 키 값은 무시(SKIP)하고 다음으로 넘어가는 형태로 처리 한다. 일반적으로 GROUP BY 또는 집합 함수 가운데 MAX( ) 또는 MIN( ) 함수에 대해 최적화를 하는 경우에 사용된다. 

Index Skip Scan 

  • WHERE 조건절에 조건이 없는 인덱스의 선행 칼럼의 유니크한 값의 개수가 적어야 합 예) ENUM( 'M', 'F')
  • 쿼리가 인덱스에 존재하는 칼람만으로 처리 가능해야 함 (커버링 인덱스)