새소식

자격증 준비~

[친절한 SQL] 중복 인덱스 제거

  • -
반응형

실제 개발자들이 인덱스를 생성하다보면 이후에 중복된 인덱스들이 존재할 수도 있다고 한다. 이번에는 인덱스중에서 중복되는 역할을하는 인덱스를 찾아 제거하는 방법에 대해 공부해보았다.

 

 

■ 중복 인덱스 찾기

세 인덱스는 중복이다. X02 는 선두컬럼이 X01 인덱스 전체를 완전히 포함하고, X03 인덱스 선두 컬럼이 X01과 X02 인덱스 전체를 완전히 포함하기 때문이다.  필자는 이를 '완전 중복'이라고 부른다. X03 인덱스를 남기고, X01, X02 인덱스는 삭제해도 된다.

 

1) X01 : 계약ID + 청약일자

2) X02 : 계약ID + 청약일자 + 보험개시일자

3) X03 : 계약ID + 청약일자 + 보험개시일자 + 보험종료일자

 

 

■ 중복제거 실습

• PK : 주소ID + 건물동번호 + 건물호번호 + 관리번호

• N1 : 상태구분코드 + 관리번호

• N2 : 관리번호

• N3 : 주소ID + 관리번호

컬럼명 NDV
주소ID 736000
건물동번호 175
건물호번호 3052
관리번호 250782
상태구분코드 3

* NDV = Number of Distinct Values 의 약자로 컬럼에 입력된 값의 종류 개수를 의미한다.

 

- 표를 보면 상태구분코드의 NDV가 3으로 선택도가 높은것을 알 수 있다. 

- 상태구분코드만으로 조건절이 주어졌을때 N1 인덱스를 이용하지 않는다. N1인덱스는 상태구분코드와 관리번호를 같이 조회해야한다. ( 아마도 상태구분코드로만 하게되면 TFS를 하게될 것 으로 보인다... )

- N2 인덱스는 관리번호로 조회할때만 사용되므로 N2 인덱스를 제거하고 N1의 인덱스를 [ 관리번호 + 상태구분코드 ] 로 변경한다.

- N1 인덱스 [ 관리번호 + 상태구분코드 ] 로 고치게 되면 관리번호로만 조회하든, 상태구분코드까지 같이 조회하든 N1 인덱스 하나만 사용하면된다.

 

• PK : 주소ID + 건물동번호 + 건물호번호 + 관리번호

• N1 : 관리번호 + 상태구분코드

• N2 : 관리번호

• N3 : 주소ID + 관리번호

 

 

* 여기서 주의할 점으론 상태구분코드가 NDV가 3이긴하나 그중 특정 값이 변별력이 매우 좋을수 도 있다. 이떄 그값을 조회할떄 사용할 목적으로 N1 인덱스를 만들었다면, N1 인덱스 구성을 바꾸면 문제가 생길 수 있다.

 

 

참조: 친절한 SQL 튜닝(개발자를 위한 SQL 튜닝 입문서)

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.