Backend 개발/SQL 성능 개선

인덱스가 동작하지 않는 경우

수달리즘 2025. 4. 30. 10:34
반응형

특정 컬럼에 인덱스를 설정했는데 성능이 개선되지 않거나 실행 계획 확인 시, 인덱스가 동작하지 않는다면 다음과 같은 원인을 추측해볼 수 있다.

1. 넓은 범위의 데이터를 조회할 때

옵티마이저가 넓은 범위의 데이터를 조회할 때 인덱스를 활용하는 것이 비효율적이라고 판단할 때 인덱스가 동작하지 않고 실행 계획 결과 type: ALL 이 나온다.

넓은 범위의 데이터를 인덱스를 거쳐서 각 원래 테이블의 데이터를 일일이 하나씩 찾아내는 것보다, 바로 원래 테이블에 접근해서 모든 데이터를 통째로 가져와서 정렬하는 것이 효율적이라고 판단한 것. 실제 성능상으로도 풀 테이블 스캔을 통해 가져오는 것이 효율적이다.

2. 인덱스를 설정한 컬럼을 가공할 때

인덱스를 건 컬럼을 가공하면 MySQL과 같은 일부 RDBMS에서는 해당 인덱스를 사용하지 못하는 경우가 많다.

여기서 가공이란 다음과 같은 예시이다.

select * form users where substring(name, 1, 10) = 'test1';
select * from users where salary * 2 < 1000 order by salary;

substring과 같은 함수를 인덱스에 사용하거나 인덱스 컬럼에 연산을 하면 가공을 한다고 볼 수 있는데 이런 작업을 하지 않도록 다음과 같이 수정하는 것이 좋다.

select * form users where name like 'test1%';
select * from users where salary < 1000/2 order by salary;
728x90
반응형