🎫 인덱스 스캔 방식
트리 구조에서 어떻게 가장 효율적으로 원하는 인덱스를 찾을지 고민하는 방식 (MySQL 기준으로 정리)
1. Index Range Scan
- B-Tree의 가장 일반적인 스캔 방식
- Root부터 Leaf 노드까지 수직적 탐색
2. Index Full Scan
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의 일부
- 쿼리 힌트를 사용하면 옵티마이저가 자동으로 생성하는 실행 계획을 제어하거나 변경 가능
- 쿼리의 성능을 최적화하거나 원하는 실행 계획을 강제하는 데 사용