Msg 성장일기

인덱스 설계 본문

study_SQL/친절한 SQL 튜닝

인덱스 설계

공부하는 어른이 2023. 6. 14. 19:47

SQL 각각에 최적화된 인덱스를 마음껏 생성할 수 있다면, SQL 튜닝과 인덱스 설계만큼 쉬운 일도 없을 것이다. 
하지만 인덱스가 너무 많으면 아래와 같은 문제가 발생한다.

더보기

1. DML 성능 저하 (→ TPS 저하)
2. 데이터베이스 사이즈 증가(→ 디스크 공간 낭비)

3. 데이터베이스 관리 및 운영 비용 상승

 

결합 인덱스 구성 시 중요한 기준

1. 조건절에 항상 사용하거나 자주 사용하는 컬럼을 선정한다.

2. '=' 조건으로 자주 조회하는 컬럼을 앞쪽에 둔다.

위 2가지의 판단 기준은 인덱스 스캔 효율성이다.

 

그 외 고려해야할 판단 기준은 다음과 같다.

→ 수행빈도, 업무상 중요도, 클러스터링 팩터, 데이터량, 저장공간, DML 부하 등

 

수행빈도가 매우 높은 SQL이라면, 테스트 과정에 당장 성능이 좋게 나오더라도 인덱스를 최적으로 구성해 줘야한다. NL 조인 Inner 쪽 인덱스는 '=' 조건 컬럼을 선두에 두는 것이 중요하고, 될 수 있으면 테이블 액세스 없이 인덱스에서 필터링을 마치도록 구성해야 한다.

 

[ 소트 연산을 생략하기 위한 컬럼 추가 ]

인덱스는 항상 정렬 상태를 유지하므로 ORDER BY, GROUP BY를 위한 소트 연산을 생략할 수 있게 해준다. 따라서 조건절에 사용하지 않는 컬럼이더라도 소트 연산을 생략할 목적으로 인덱스 구성에 포함시킴으로써 성능 개선을 도모할 수 있다.

 

I/O를 최소화하면서 소트 연산을 생략하면, 아래 공식에 따라 인덱스를 구성하면 된다.

1) '=' 연산자로 사용한 조건절 컬럼 선정

2) ORDER BY 절에 기술한 컬럼 추가

3) '=' 연산자가 아닌 조건절 컬럼은 데이터 분포를 고려해 추가 여부 결정

 

 

출처: 개발자를 위한 SQL 튜닝 입문서 친절한 SQL 튜닝

'study_SQL > 친절한 SQL 튜닝' 카테고리의 다른 글

소트 튜닝  (0) 2023.06.16
조인튜닝  (0) 2023.06.15
인덱스 스캔 효율화  (0) 2023.06.14
부분범위 처리 활용  (0) 2023.06.14
테이블 액세스 최소화  (0) 2023.06.14