Log 및 LogItem 테이블이 있습니다. 둘 다에서 일부 데이터를 가져 오기 위해 쿼리를 작성 중입니다. 수천 개가 Logs
있으며 각각 Log
최대 125 개를 가질 수 있습니다LogItems
문제의 쿼리가 복잡하므로 건너 뛰고 있습니다 (누군가 생각하면 게시 할 수 있다고 생각하면) SSMS Estimated Query 계획을 실행하면 새로운 비 클러스터 색인이 성능을 최대 100 % 향상시킬 것이라고 말했습니다. .
Existing Index: Non-clustered
Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified
Query Plan Recommendation
CREATE NONCLUSTERED INDEX [LogReportIndex]
ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified])
재미있게, 나는이 새로운 색인을 만들고 쿼리를 실행했으며 놀랍게도 10 초 전에는 쿼리가 실행되기까지 ~ 1 초가 걸렸습니다.
기존 인덱스가이 새 쿼리를 처리한다고 가정했기 때문에 새 쿼리에 사용 된 열에 만 새 인덱스를 생성하면 성능이 향상되는 이유는 무엇입니까? 내 where
절에 사용 된 각 고유 한 열 조합에 대한 색인이 있어야합니까 ?
참고 : SQL Server가 내 결과를 캐싱하고 있기 때문에 인덱스를 생성하기 전에 약 25-30 번 쿼리를 실행했으며 인덱스 이후 10-15 초가 걸렸습니다. 이하.