[DB] 실행계획, 힌트

·2025년 1월 16일

데이터베이스

목록 보기
17/22
post-thumbnail

실행계획(Execution Plan)

인덱스 확인하려면?

인덱스가 효과적으로 작동하는지 확인하려면 몇 가지 방법이 있음

  • 실행 계획 확인
  • 쿼리 실행 시간 분석
  • 데이터베이스 통계 및 모니터링 툴 활용

실행계획이란?

  • 사용자가 SQL을 실행하여 데이터를 추출하려고 할 때 옵티마이저가 수립하는 작업절차

실행계획 분석 시 확인해야 할 항목

  • 인덱스 활용 여부 확인
    • Full Table Scan
    • Index Scan (Index Range Scan, Index Unique Scan, Index Skip Scan...)
  • 조인 방식과 순서 확인
  • 필터링 조건 위치

실행 계획 조회

  • EXPLANIN 명령어 사용
EXPLAIN SELECT * FROM users
WHERE age = 20;

  • id: 실행 단계 순서
  • select_type: SELECT문 유형
    • SIMPLE: 단순 SELECT
    • PRIMARY: 최상위 쿼리
    • DERIVED: 서브쿼리나 인라인 뷰에서 생성된 임시 테이블
    • SUBQUERY: 서브쿼리의 첫 번째 SELECT문
    • UNION: UNION의 두 번째 이후 SELECT문
    • DEPENDENT SUBQUERY: 상위 쿼리에 의존적인 서브쿼리
  • table: 조회한 테이블 명 또는 별칭
  • partitions: 액세스 중인 테이블 파티션 정보
  • type: 데이터 액세스 방식
    • ALL: 테이블 풀 스캔
    • INDEX: 인덱스 풀 스캔
    • RANGE: 인덱스 레인지 스캔
    • REF: 비 고유 인덱스를 사용한 경우
    • EQ_REF: 조인 시 한 테이블의 특정 값이 다른테이블의 PK 또는 UK에 매칭되는 경우 (1대1 관계에서 조인할때 사용)
    • CONST: PK 또는 UK로 단 하나의 레코드만 조회
  • possible_keys: 사용 가능한 인덱스 목록
  • key: 실제 사용된 인덱스 이름
  • key_len: 사용된 인덱스의 길이
  • ref: 비교에 사용된 값
  • rows: 예상 처리 행 수
  • filtered: 필터링된 데이터의 비율
  • Extra: 추가 작업
    • Using where: WHERE 조건을 사용해 데이터를 필터링
    • Using index: 테이블 데이터에 접근하지 않고 인덱스만 사용 (커버링 인덱스)
    • Using temporary: 중간 결과에 임시 테이블 사용
    • Using filesort: 쿼리 실행 중 정렬 작업 수행

힌트(Hint)

힌트란?

  • 힌트는 SQL 쿼리 작성 시 데이터베이스 옵티마이저가 특정 방식으로 쿼리를 실행하도록 지시하는 명령어
  • 쿼리 최적화가 필요하거나, 옵티마이저의 기본 선택이 비효율적일 때 사용
  • 힌트는 쿼리의 일부로 사용되며, 데이터베이스가 실행 계획을 수립할 때 참고함

MySQL 예시:

// 특정 인덱스를 강제 사용
SELECT * FROM employees FORCE INDEX (idx_salary) WHERE salary > 50000;

힌트 사용하는 이유

  • 옵티마이저의 기본 선택을 우회
  • 특정 인덱스 강제 사용 지시
  • 조인 순서 및 방식 제어 명시적으로 지정

0개의 댓글