인덱스 스캔 방식을 알아보기전 where절 가공방식에 대해 설명해 드리겠습니다.

WHERE절의 좌변이 아닌 우변을 가공할 것

SELECT ename, sal*12 FROM emp WHERE sal * 12 = 36000;

-> SELECT ename, sal*12 FROM emp WHERE sal = 36000/12;
SELECT ename, job FROM emp WHERE substr(job,1,5)='SALES';

-> SELECT ename, job FROM emp WHERE job LIKE 'SALES%';
SELECT ename, hiredate FROM emp WHERE DATE_FORMAT(hiredate, '%Y') = '1981';

-> SELECT ename, hiredate FROM emp WHERE hiredate BETWEEN STR_TO_DATE('1981/01/01', '%Y/%m/%d')
and STR_TO_DATE('1981/12/31', '%Y/%m/%d') + INTERVAL 1 DAY;

현재 사용하고 있는 DB는 MySQL로 MySQL은 InnoDB 엔진을 사용하며, InnoDB 엔진은 B+Tree를 인덱스 트리 구조로 사용하고 있습니다 따라서 B+Tree를 기준으로 작성하도록 하겠습니다

Index Range Scan

b-tree, b+tree 기초 지식

인덱스를 통해 B+Tree를 수직으로 탐색 후 leaf 노드에서 필요한 범위까지 수평적으로 탐색하는 방식입니다.

select * from park_mgt_info where park_info_id<3;

<, <=, >, >=, between, IS NULL, IS NOT NULL 등 범위를 조건으로 설정시 Index range scan을 진행함을 알 수 있습니다.

Full Index Scan, Full Table Scan

Index Range Scan과 달리 수직적인 탐색이 없이 리프 블록 처음부터 끝까지 수평적인 탐색만 존재하는 Scan 방식입니다.

Full Scan을 하게되면 첫번째 leaf 노드를 수직 탐색후 나머지 leaf노드에 대해 순차적으로 전체를 탐색하게 됩니다.