종종 올바른 인덱스가없는 큰 테이블에 대해 쿼리를 실행해야합니다. 그래서 DBA에게 그러한 인덱스를 만들도록 요청합니다. 그가하는 첫 번째 일은 테이블 통계를보고 인덱스 공간 크기를 보는 것입니다.
종종 그는 "인덱스가 이미 테이블보다 크기 때문에"다른 대안을 찾도록 지시 할 것입니다. 그는 인덱스가 데이터보다 작아야한다고 생각합니다. "책에서 색인을 본 적이 있습니까? 책 자체보다 훨씬 작으며 이것이 바로 테이블 색인이되는 방법"이라고 말했기 때문입니다.
나는 그의 철학이 옳다고 생각하지 않지만, 그는 DBA를 이끌고 개발자이기 때문에 도전 할 수 없다. 쿼리에 인덱스가 필요한 경우 읽을 수없고 유지 관리 할 수없는 SP를 만드는 "해결 방법"을 찾는 대신 인덱스를 만들어야합니다.
필요한 열만 선택하고 있습니다. 문제는 날짜별로 필터링하므로 엔진이 열과 일치하도록 테이블 스캔을 수행해야한다는 것입니다. 쿼리는 통계를 수집하기 위해 하루에 한 번 밤에 실행되지만 실행하는 데 15 분이 걸립니다 (또 다른 단단하고 빠른 규칙이 있습니다. 절차는 3 분 이상 걸리지 않습니다).
DBA는 나에게 인덱스 통계를 보여 주었다. 해당 테이블에는 약 10 개의 인덱스가 있으며 그 중 6 개만 사용되었습니다 (통계는 4 개에 0으로 표시됨). 이 시스템은 20 명 이상의 개발자가 참여하는 대규모 시스템입니다. 어떤 이유로 든 색인이 작성되어 더 이상 사용되지 않을 수 있습니다.
테스트 DB가 실행되므로 SQL Server 2008을 지원해야합니다. 그러나 고객은 모두 2014 년과 2016 년입니다.