인덱스 스캔은 데이터베이스에서 인덱스를 활용하여 효율적으로 데이터 레코드를 검색하는 방식을 말합니다.
인덱스 스캔 방식에는 다양한 방식이 있습니다.
Index Full Scan : 인덱스의 모든 데이터를 읽어오는 방법입니다. 모든 인덱스 레코드를 순차적으로 스캔하며, 주로 특정 조건 없이 모든 레코드를 처리해야 할 때 사용됩니다. 인덱스 크기가 작은 경우에는 빠른 검색이 가능하지만, 테이블의 크기가 큰 경우에는 전체 테이블 스캔보다 느릴 수 있습니다.
Index Range Scan : 인덱스의 일부 데이터만 읽어오는 방법으로, 인덱스의 범위를 지정하여 빠른 검색이 가능합니다.
인덱스의 크기와 테이블의 크기에 관계없이 빠른 검색이 가능하지만, 검색 범위가 넓을 경우에는 느릴 수 있습니다.
SQL을 처리하는 최저비용의 경로를 생성해주는 DBMS 내부 핵심엔진인 쿼리 옵티마이저가 쿼리를 수행할 때 생성한 최적의 처리경로를 실행계획(Query Plan)이라고 합니다.
MySQL에서는 실행할 쿼리문 앞에 'EXPLAN' 키워드를 이용해 실행계획에 대한 정보를 살펴 볼 수 있습니다.
이 실행계획을 이용하면 이슈가 발생하는 쿼리에 대한 이해를 도울 뿐만 아니라, 어떻게 최적화할 지에 대한 인사이트를 제공합니다.
힌트는 옵티마이저의 실행계획을 조작하는 구문을 의미합니다.
옵티마이저가 항상 최적의 실행계획을 찾아줄 수 없으므로 쿼리에 직접적으로 힌트구문 형태의 문법으로 삽입하여 옵티마이저에게 실행 계획을 알려주게 됩니다.
GROUP BY 절에 명시된 컬렘의 순서가 인덱스를 구성하는 컬럼의 순서와 같다면 인덱스를 GROUP BY 절에 사용할 수 있습니다. 또한, 인덱스를 구성하는 컬럼 중에 뒤쪽에 있는 컬럼은 GROUP BY절에 명시되지 않아도 인덱스를 사용할 수 있지만 인덱스의 앞쪽에 있는 컬럼이 GROUP BY 절에 명시되지 않으면 인덱스를 사용할 수 없습니다.