3.1.4 인덱스 컬럼 추가
테이블 엑세스 최소화하기 위해 일반적으로 사용하는 튜닝 기법은 인덱스에 컬럼 추가하는 것.
필요할때마다 인덱스를 생성하면 인덱스 관리 비용 증가하고, DML 부하에 따른 트랜잭션 성능 저하가 생길수있다
기존인덱스에 컬럼 추가하는 것만으로도 큰 효과를 얻을 수 있다. 인덱스 스캔량은 줄지 않지만, 테이블 랜덤 엑세스 횟수를 줄여주기 때문.
3.1.5 인덱스만 읽고 처리
테이블 랜덤 엑세스가 많아도 필터 조건에 의해 버려지는 레코드가 거의 없다면 비효율은 적은편이다. 인덱스 스캔 과정에서 얻은 데이터가 많다면 크만큼 테이블 랜덤 액세스가 많이 발생해 성능이 느릴 수 밖에 없음
SELECT 부서번호, SUM(수량)
FROM 판매집계
WHERE 부서번호 LIKE '12%'
GROUP BY 부서번호;
절대 일량이 많아 느린거니 어쩔수없지만, 개선해야 한다면
쿼리에 사용된 컬럼을 모두 인덱스에 추가하여 테이블 액세스가 발생하지 않게 하는 방법 고려.
인덱스만 읽어서 처리하는 쿼리를 ‘Covered 쿼리’ 라고 부르며, 그 쿼리에 사용한 인덱스를 ‘Covered 인덱스’ 라고 부른다.
생성되어있는 ‘부서번호’ 단일 인덱스에 ‘수량’ 컬럼을 추가하여 개선한다. 테이블 액세스가 제거되어 성능이 좋아지지만, 추가해야할 컬럼이 많다면 적용하기 힘듦.
3.1.7 클러스터 테이블
인덱스 클러스터 테이블
클러스터 키 값이 같은 레코드를 한 블록에 모아서 저장하는 구조. 한 블록에 모두 담을 수 없을 때는 새로운 블록을 할당해서 클러스터 체인으로 연결
해시 클러스터 테이블
알고리즘을 사용해 클러스터를 찾아가는 구조