[INDEX] 스캔 방식, 쿼리 실행 계획, 쿼리 힌트

Suzume·2023년 11월 22일
0

DataBase

목록 보기
14/16
post-thumbnail
post-custom-banner

🎫 인덱스 스캔 방식

트리 구조에서 어떻게 가장 효율적으로 원하는 인덱스를 찾을지 고민하는 방식 (MySQL 기준으로 정리)

1. Index Range Scan

  • B-Tree의 가장 일반적인 스캔 방식
  • Root부터 Leaf 노드까지 수직적 탐색

2. Index Full Scan

  • Leaf 처음부터 끝까지 수평적 탐색

3. Index Unique Scan

  • 수직적 탐색으로, = 조건으로 탐색하는 경우 동작
  • Between, like, >, <와 같은 범위 조건으로 검색하면 Index Range Scan으로 처리

4. Loose Index Scan

  • Oracle Index Skip Scan과 유사
  • 중간에 필요하지 않은 인덱스 키 값은 무시하고 넘어감
  • GROUP BY, MAX, MIN에 대한 최적화

5. Index Skip Scan

  • 조건절에 첫번째 인덱스가 없어도 두번째 인덱스만으로 인덱스 검색
  • (A, B, C)라는 인덱스가 있다고 가정하자.
    SELECT * FROM employees WHERE B = 'b' AND C = 'c'; 에서 A 컬럼 건너뛰고, B와 C만으로도 검색 가능

🎐 쿼리 실행 계획

먼저 쿼리는 DB에 대한 작업을 위해 수행 (데이터 삽입, 조회, 수정, 삭제, 테이블 생성, 데이터 삭제, 데이터 검색 등등...) 트랜잭션과 다름 !!

1. Query Plane?

  • 쿼리 옵티마이저: SQL을 처리하는 최저비용의 경로를 생성하는 DBMS 내부 핵심엔진
  • 쿼리 플랜: 쿼리 옵티마이저가 쿼리를 수행할 때 생성한 최적의 처리경로

2. Query Plane 실행

  • EXPLAIN 키워드를 쿼리 앞에 붙여서 확인
  • EXPLAIN SELECT * FROM employees WHERE department_id = 10;
  • 위의 SELECT문에 대한 쿼리 실행 계획을 테이블로 보여줌

🎐 쿼리 힌트

  • DB 옵티마이저에게 쿼리 실행 계획을 만들 때 어떤 방식으로 처리할지에 대한 지시를 제공하는 SQL의 일부
  • 쿼리 힌트를 사용하면 옵티마이저가 자동으로 생성하는 실행 계획을 제어하거나 변경 가능
  • 쿼리의 성능을 최적화하거나 원하는 실행 계획을 강제하는 데 사용
profile
미네르바의 부엉이는 황혼이 저물어야 그 날개를 편다.
post-custom-banner

0개의 댓글