공부, 기록

[SQL Server] 동일한 컬럼을 가진 인덱스와 통계 본문

공부/DATABASE

[SQL Server] 동일한 컬럼을 가진 인덱스와 통계

무는빼주세요 2024. 4. 2. 15:52

SP에서 Sort가 오래 걸리는 상황이 발생하여 정렬되는 기준으로 include 컬럼을 포함한 인덱스를 추가로 생성하였다.
기존 인덱스를 A 
신규 인덱스를 B로 칭하면
A는 CREATE INDEX A ON TABLE_MINJAE (COL1, COL2 ) 
B는 CREATE INDEX B ON TABLE_MINJAE (COL1, COL2 ) INCLUDE (COL3) 인 상황.
 
SP에서 지연되는 부분에 INDEX 힌트로 B 인덱스를 강제하였을 때 Sort 지연이 해소가 되었는데. 실행계획을 자세히 확인하였을 때 해당 인덱스가 아니었어도 동일하게 해소가 되어야 하는 상황으로 보였다. B 인덱스 힌트를 제거하고 A 인덱스 힌트를 사용하였을 때 성능이 다시 좋아진 것을 확인하였고 신규 생성한 인덱스 B를 제거하였는데 삭제와 동시에 다시 SP가 지연되는 상황이 발생하였다.
 
이에 이상함을 느껴 인덱스 생성 전후로 해당 테이블의 통계들을 확인하였을 때 신규 인덱스 생성으로 통계만 신규로 생성이 되었다. 이후 B 인덱스를 제거 및 A 인덱스의 통계를 업데이트하여 성능을 다시 향상시켰다.
이 과정을 통해서 동일한 컬럼으로 인덱스가 2개가 생성된 상황에서 A 인덱스가 B의 인덱스 통계를 사용한 것으로 추측된다.
 
전체 타임라인은.
A 인덱스 (성능 감소) -> B인덱스 생성 및 인덱스 힌트 사용 (성능 상승) -> A 인덱스로 힌트 변경 (성능 상승) -> B 인덱스 제거 (성능 감소) -> A 인덱스 통계 업데이트 (성능 상승)
 
자칫 잘못하여 성능이 개선된 부분만 확인하고 넘겼을 때 불필요한 인덱스 생성 및 다시 상황이 재발할 수 있었다. 확인 및 정상적인 처리를 진행하여 다행이다.
 
 
인덱스 생성 전 실행계획



 
인덱스 생성 후 실행계획

 


경고가 제거 됨

미리 읽기가 제거 됨