Post

5주4일차_EXPLAIN과실행계획통계성쿼리실습

5주4일차_EXPLAIN과실행계획통계성쿼리실습

필기 가자

  1. type (쿼리 실행 방법)
    • 쿼리의 성능에 가장 큰 영향을 미치는 필드로, 데이터 검색 방식을 나타냅니다.
    • 주요 값:
      • ALL:
        • 테이블의 모든 데이터를 탐색하는 Full Table Scan.
        • 성능이 가장 낮으며, 일반적으로 피해야 합니다.
      • index:
        • 테이블의 전체 인덱스를 탐색하며, 성능이 ALL보다 좋습니다.
      • range:
        • 범위를 지정하여 데이터를 검색합니다.
        • 주로 BETWEEN, >, < 같은 범위 조건에서 사용됩니다.
      • ref:
        • 인덱스를 사용하여 특정 값을 검색합니다.
        • 예: 외래 키나 WHERE 절의 조건으로 사용되는 경우.
      • eq_ref:
        • 고유한 값(Primary Key, Unique Key)을 기준으로 검색합니다.
        • 가장 효율적인 검색 방식 중 하나입니다.
      • const/system:
        • 단 하나의 행만 참조하며, 매우 빠른 검색 방식입니다.
  2. rows (검색 대상 행의 수)
    • 데이터베이스가 검색해야 하는 예상 행의 개수입니다.
    • 값이 클수록 성능 저하 가능성이 높음.

3.2 비효율적인 쿼리 개선하기

  1. 비효율적인 쿼리:
1
SELECT * FROM orders WHERE YEAR(order_date) = 2023;
  • 문제:
    • YEAR() 함수는 order_date 컬럼의 값을 변환하여 비교하므로, 인덱스를 사용할 수 없음.
    • 결과적으로 Full Table Scan이 발생.
  • count 쿼리 최적화~!
    • 테이블 풀스캔을 where절 조건식에 들어간 컬럼에 인덱스를 걸어서 ref(인덱스를 활용한 스캔) 방식으로 변경하기.
  • group by
    • 그룹바이 걸린 컬럼을 인덱스로! -> 풀스캔에서 index 풀 타입으로 최적화!

Action Plan

수업 내용 필기 정리.

  • 교재 설명 이상 EXPLAIN SELECT o.id, c.name FROM orders o JOIN customers c ON o.customer_id = c.id WHERE c.city = ‘New York’; 위 예시 관련 부분의 결과 분석 파트는 이미 반영 된 사항이 아닌가

  • where절에 사용하는 컬럼에 함수를 적용하면 index가 활용되지 못함.

    • ex) WHERE YEAR(create_at) = ‘2025’
This post is licensed under CC BY 4.0 by the author.