SQL 실행 계획 상세 보기

twocowsong·2023년 3월 29일

SQL

목록 보기
1/2

SQL 실행 계획 조회 하기

PostgreSQL: EXPLAIN SELECT * FROM your_table;

MySQL: EXPLAIN SELECT * FROM your_table;

Oracle: EXPLAIN PLAN FOR SELECT * FROM your_table;

조회된 실행 계획의 컬럼 설명

id : 각 SELECT 쿼리에 대한 고유 식별자입니다. 다중 SELECT 쿼리가 있는 경우, id는 이를 구분하는 데 도움이 됩니다.

select_type: SELECT 쿼리의 유형입니다. 예: SIMPLE, PRIMARY, SUBQUERY, UNION, UNION RESULT 등

  • DEPENDENT SUBQUERY 이 유형의 서브쿼리는 외부 쿼리의 각 행에 대해 실행되므로, 전체 쿼리의 성능에 부정적인 영향을 미칠 수 있습니다. 외부 쿼리의 각 행에 대해 서브쿼리가 실행되어야 하므로, 전체 쿼리 실행 시간이 증가합니다. 데이터베이스 최적화기가 서브쿼리에 대한 최적화를 수행하기 어려울 수 있습니다. 이는 서브쿼리가 외부 쿼리의 결과에 의존하기 때문입니다.

  • 가능한 경우 JOIN을 사용하여 서브쿼리를 제거합니다.
    쿼리가 사용하는 인덱스를 검토하고 필요한 경우 추가하거나 수정합니다.
    필터링 조건을 최적화하여 불필요한 행을 제거합니다.

table: 쿼리에서 참조되는 테이블의 이름입니다.

type: 행 접근 방식을 나타내며, 이 정보는 쿼리 최적화에 중요합니다. 일반적인 값은 다음과 같습니다.

  • ALL (풀 스캔)
  • index (인덱스 풀 스캔)
  • range (인덱스 범위 스캔)
  • ref (인덱스를 사용한 테이블 참조)
  • eq_ref (고유 인덱스를 사용한 테이블 참조)
  • const, system (최적화된 상수 테이블 참조)

possible_keys: 쿼리에서 사용할 수 있는 인덱스 후보입니다.

key: 쿼리에 실제로 사용된 인덱스입니다.

key_len: 사용된 인덱스의 길이입니다.

ref: 인덱스를 사용하여 행을 선택할 때 참조되는 열 또는 상수입니다.

rows: 쿼리가 처리할 예상 행 수입니다. 이 값이 작을수록 쿼리 처리 성능이 더 좋습니다.

Extra: 쿼리 수행에 대한 추가 정보입니다. 예를 들어, "Using temporary"는 임시 테이블 사용을 나타내고 "Using filesort"는 파일 정렬을 나타냅니다.

  • Using index: 이 값은 쿼리 최적화를 위해 인덱스가 사용되었음을 나타냅니다. 이 경우, MySQL은 인덱스를 사용하여 모든 필요한 데이터를 가져올 수 있으며, 실제 데이터 행을 검색할 필요가 없습니다. 이를 커버링 인덱스(Covering Index)라고도 합니다. 'Using index'가 표시되면 쿼리 성능이 일반적으로 더 좋습니다.

  • Using where: 이 값은 쿼리에서 WHERE 절이 사용되었음을 나타냅니다. 즉, MySQL이 반환되는 행을 필터링하기 위해 WHERE 조건을 적용했습니다. 'Using where'는 반드시 나쁜 성능을 의미하지는 않지만, 경우에 따라 불필요한 풀 스캔이 발생할 수 있으며 인덱스를 사용하지 않는 경우 성능에 영향을 줄 수 있습니다.

profile
null null null null

0개의 댓글