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