안녕하세요 초보 개발자 입니다.
Index 관련하여 궁금한 점이 있어서 이렇게 글을 남깁니다.
테이블 조회 빠르게 하려고 클러스터 인덱스와 논클러스터 인덱스들을 테이블에 생성하였습니다.
그런데 테이블 특성상 update가 자주 일어나서 그런지 특정 index의 조각화가
실시간으로 너무 심하게 발생이 되는데, 이경우 해당 index를 지우는게 나을지 아니면
해당 index rebuild를 주기적으로 해줘야 할지 궁금합니다. 어느쪽이 성능에 도움이 될까요?
조각화가 처음 발생 되서 삭제후 생성도 해보고, rebuild도 해보고 하였는데,
조각화는 거의 평균적으로 40~60까지 발생이 되네요..
아시는분 도움 부탁 드리겠습니다. 감사합니다.
Comment 1
-
코난(김대우)
2023.07.29 15:55
초보리님, 안녕하세요. 데이터가 얼마나 많은지, Seek 할 경우과 Scan 할 경우 IO와 CPU가 얼마나 차이가 날지 모르겠습니다.
우선,
1) 사용하는 쿼리가 얼마나 자주, 얼마나 중요한지에 따라 우선순위를 정해 보시는게 좋겠습니다.
2) INDEX 조각화가 너무 자주, 빠르게 발생하고 있다면, 삭제했을 경우와 유지할 경우의 IO나 CPU 비용, 테이블 데이터 성장성을 확인하고 진행 여부를 결정해 보세요.
3) 여전히 INDEX를 유지해야 할 필요가 있다면,
- SQL Agent를 이용해 주기적으로 INDEX를 업데이트(예를 들어, 10분에 1회)
- 전체 DB REINDEX가 아닌 해당 테이블만 INDEX REINDEX
- 어렵다면 테이블의 해당 INDEX만 DEFRAG
하는 것도 방법이 될 듯 합니다.
https://learn.microsoft.com/en-us/sql/relational-databases/indexes/reorganize-and-rebuild-indexes?view=sql-server-ver16