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
반응형