인덱스 튜닝
Table Scan
Heap Table
- Clustered Index가 없는 Table (Data Page)
Table Scan
- Heap Table에서 인덱스 사용하지 않는 데이터 검색
- Full Scan(전체 검색)
- OLTP 성 쿼리 인 경우 Table Scan이 되면 안됨
RID Lookup (Row ID Lookup)
논리적으로 Select 하는 행 수 만큼 읽는다. (물리적
Nonclustered Index 설계
- 결과 행 수가 작은 조건 열
- 결과 행 크기가 작은 쿼리
Clustered Index
트랜댁션 성능을 위한 후보 열 선택
- OLTP성
- UNIQUE 할 것
- 키 길이가 작은 것
- 정적인 데이터일 것(한번 Insert 되면 못바꾸는)
- 아니면
- 키 값 Update 시 위치 이동 가능
- 유지 관리 비용 발생
- Page Split 유발
- 조회 쿼리 성능을 불만족
- 쿼리 성능을 위한 후보 열 선택
- 대량 범위 조건을 가지고 있는가?
- 공통 조건으로 많이 사용되는가?
- Group by 절에 많이 사용되는가?
- 대량 조인 조건으로 사용되는가?
- 정렬 조건으로 많이 사용되는가?
Covering Index
- Lookup 을 수행하지 않는 경우의 Nonclustered Index
- Lookup 으로 인한 과도한 random I/0를 줄이자
Included Columen (포괄 열)
- Key열 대신 Key가 아닌 열로 구성
- Where, group by, join에 사용되어 key로 설정이 되어야 한다면 covering index
- 단순히 select를 할 것이라면 포괄 열
Composite(복합) Index
- PK는 비즈니스 순서 고려
- 열 순서 중요하게 고려(인덱스에서 검색할 작업량을 최소화 목적)
- 최소 열 수 원칙
- (=Equal) 조건이 앞에 있으면 좋고 범위 조건은 뒤로 놓을 수록 좋음 (Equal 조건이 아닌 경우 하위 열은 인덱스 조건 상실 Index Seek 함)
- 모두 범위 조건인 경우 or 상위 일부 열만 조건 식에 사용된다면?