[MySQL] 풀스캔 쿼리 패턴 및 튜닝

기훈·2024년 7월 15일

MySQL

목록 보기
7/23

인덱스를 사용하지 못하고 풀스캔으로 처리되는 경우

1. 컬럼이 가공되는 경우

  • 연산
    SELECT * FROM tb1 WHERE count + 10 < 2000
  • 함수
    SELECT * FROM tb1 WHERE MOD(id,2) = 0
  • 형변환
    SELECT * FROM tb1 WHERE str_column = 12345

2. 인덱싱 되지 않은 컬럼을 조건에 OR 연산과 함께 사용

3. 복합 인덱스의 컬럼 중 선행 컬럼을 조건에서 누락

4. LIKE 연산에서 시작 문자열로 와일드 카드를 사용

  • %Esther% 처럼 와일드카드를 문자열 앞뒤로 사용하는 경우 풀스캔이 발생한다. (이 부분은 실제 쿼리 실행 계획을 보면서 경우의 수를 찾아봐야 할 것 같다)
  • %Esther로 문자열이 끝나는 경우도 풀스캔이 발생한다.

5. 정규식 연산 사용

6. 풀스캔이 인덱스 사용보다 효율적인 경우

  • 이부분은 옵티마이저가 알아서 잘 해줄거임 !

7. NOT Equal 조건과 IS NOT NULL 조건

  • 데이터가 테이블에 차지하고 있는 비율에 따라 옵티마이저가 인덱스 사용 유무를 결정함

0개의 댓글