eq_range_index_dive_limit는 MySQL의 옵티마이저 설정 중 하나로, 범위 조건을 포함하는 쿼리에서 인덱스를 얼마나 깊이 탐색할 것인지를 결정하는 변수입니다. 기본적으로, 인덱스를 활용하여 여러 값의 선택도를 평가할 때, 일정 개수 이하의 값에 대해서만 개별적으로 통계를 조사하고, 그 이상일 경우 대략적인 카디널리티(Cardinality) 값을 사용합니다.
eq_range_index_dive_limit보다 작은 개수의 범위 조건이 있는 경우 개별 인덱스 통계를 조회합니다.IN() 또는 BETWEEN과 같은 쿼리에서 영향을 미칩니다.데이터베이스가 인덱스를 탐색할 때, 너무 깊이 조회하면 오버헤드가 증가하지만, 너무 얕게 조회하면 부정확한 실행 계획이 선택될 가능성이 있습니다. eq_range_index_dive_limit 값을 적절히 설정하면 불필요한 탐색을 줄이고 최적의 실행 계획을 유지할 수 있습니다.
대량의 데이터를 다루는 환경에서는 카디널리티를 평가하는 과정이 성능에 큰 영향을 줍니다. 적절한 설정을 통해 옵티마이저가 보다 빠르고 정확한 방식으로 실행 계획을 수립하도록 도울 수 있습니다.
eq_range_index_dive_limit는 MySQL의 글로벌 변수 또는 세션 변수로 설정할 수 있습니다.
-- 현재 설정값 확인
SHOW VARIABLES LIKE 'eq_range_index_dive_limit';
-- 전역적으로 설정 (서버 재시작 후에도 유지됨)
SET GLOBAL eq_range_index_dive_limit = 10;
-- 세션 단위 설정 (현재 세션에서만 적용됨)
SET SESSION eq_range_index_dive_limit = 5;
WHERE column IN (1,2,3,4,5,6,7,8,9,10) 같은 쿼리는 옵티마이저가 인덱스를 깊이 탐색할 필요가 있습니다.EXPLAIN을 활용하여 예상치 못한 풀 테이블 스캔이 발생하는 경우 값을 조정해 볼 수 있습니다.