
학생 - 회원 모델링
Datagrip Oracle rownum , index 실행계획 정리
예시) 학생과 시험으로 DB모델링을 한다면?
bad modeling
테이블을 먼저 만든다.
학생 테이블, 시험테이블, 시험문제 테이블, ...
데이터를 먼저 만든다.
예시 데이터
수학시험 | 문제번호 | 보기 ...
시험의 종류 : 수학, 국어, 과학 .. -> 테이블로 만들어야 한다.
각 시험의 문제번호 -> 테이블로 만들어야 한다.
문제의 보기 -> 테이블로 만들어야 한다. ( PK는 딱히 없을듯 해보인다 )
사용자가 SQL을 실행하여 데이터를 추출하려고 할 때 옵티마이저가 수립하는 작업절차를 뜻한다.
토이프로젝트 정도의 레벨에서는 관리,조작 해야할 데이터의 개수가 100만건 정도는 안되다 보니 쿼리의 실행속도의 차이를 못느끼지만,
엔터프라이즈(기업) 급 DB업무 에서는 쿼리문 자체가 수 십 줄도 넘어 갈 뿐더러 실행속도 또한 어마어마하게 느리다.
인덱스를 활용하여 실행계획을 바꿔준다면 실행속도를 Dynamic / Dramatic 하게 줄여줄 수 있다.
이를 SQL 튜닝 이라고 부른다.
JetBrain 의 Datagrip || Maria DB의 쿼리 편집기 HiediSQL 에서
실행되는 쿼리문의 실행계획을 볼 수 있다.
실행계획에는 크게 3가지의 SCAN이 있습니다.
1. FULL TABLE SCAN
FULL 이라는 단어를 만나시면 잘못되었구나~ 하고 튜닝을 시작하시면 됩니다.
대부분 FULL SCAN의 계획은 수행속도가 느립니다.
ROWID SCAN
ROWID를 기준으로 데이터를 추출합니다.
조건절에 ROWID를 직접 명시할 경우 볼 수 있는 실행계획입니다.
INDEX SCAN
인덱스를 활용하여 원하는 데이터를 추출하는 방식입니다.
인덱스 사용 시 -> type : range

FULL SCAN 시 -> type : ALL
