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
을 활용하여 예상치 못한 풀 테이블 스캔이 발생하는 경우 값을 조정해 볼 수 있습니다.