안녕하세요, 유튜브 SQL 튜닝 강의를 보고 학습한 자료를 남깁니다.
감사합니다.
SQL 문의 '실행 계획' 사용해보기
옵티마이저는 SQL 요청이 들어오면
어떤 방식으로 어떻게 처리할지를 계획해요.
실행 계획을 통해서 이를 직접 알아볼 수 있다.
SQL 튜닝은 이 계획을 바꾸어주는 것이다.
옵티마이저 실행 계획 확인 방법
실행계획 타입
테이블은 PK를 기준으로 인덱스가 형성되어 있기 때문에
age 컬럼으로 조건절로 조회를 하면
Full Table Scan을 하게 된다.
다음은 INDEX FULL SCAN을 통해서 데이터를 가져온 것이다.
FULL TABLE SCAN을 한 방법보다
훨씬 더 빠르게 SELECT가 되는 것을 볼 수 있다.
UNIQUE가 아닌 경우라면 해당 컬럼에 데이터가 중복되어서 입력이 된다.
그래서 const가 출력될 수 없다.
중복되지 않은 컬럼에서 데이터 1건을 찾는 순간
나머지 데이터는 볼 필요가 없어진다. 훨씬 빠른 것이다.
성능 개선이 필요 없을 정도로 제일 좋다.
type이 const인 것을 볼 수 있다.
인덱스이기 때문에 한 번에 찾을 수 있는 것이다.
인덱스로 범위 형태의 데이터를 조회하는 것이다.
하지만 찾아야할 범위가 너무 크다면, 인덱스에서 찾아서 다시 실제 테이블에서 찾아야 하기 때문에
성능저하의 요인이 될 수 있다.
다음과 같이 인덱스를 갖은 컬럼을 기준으로 RANGE INDEX SCAN을 하였다.
EXPLAIN 명령어로 조회시 type에 range가 나오는 것을 볼 수 있다.
비고유 인덱스 스캔을 하는 것이다.
인덱스 표에 데이터들이 정렬되어 있기 때문이다.
type에 ref가 나오는 것을 볼 수 있다.
비고유 인덱스로 데이터를 찾았다.
이외에도 type들이 많다.
eq_ref, index_merge, ref_or_nul 등이 있다.
정말 감사합니다.
https://www.youtube.com/watch?v=4a747XKKkkw&list=PLtUgHNmvcs6rJBDOBnkDlmMFkLf-4XVl3&index=11
'친절한 SQL 튜닝' 카테고리의 다른 글
[친절한 SQL 튜닝] 12강) WHERE문이 사용된 SQL문 튜닝하기 - 1 (2) | 2024.10.29 |
---|---|
[친절한 SQL 튜닝] 11강) [실습] 한 번에 너무 많은 데이터를 조회하는 SQL문 튜닝하기 (1) | 2024.10.29 |
[친절한 SQL 튜닝] 8,9강) 자동 생성 인덱스 (4) | 2024.10.29 |
[친절한 SQL 튜닝] 7강) [실습] 인덱스 직접 설정해보기 / 성능 측정해보기 (1) | 2024.10.29 |
[친절한 SQL 튜닝] 6강) 인덱스(Index)란? (0) | 2024.10.28 |