컨텍스트 : SQL Server 2008. 내부 조인에 2 개의 테이블이 있습니다. 4 천만 개의 행이있는 팩트 테이블에는 환자 키와 관리되는 약물 및 기타 사실이 들어 있습니다. 약물 키와 환자 키를이 순서로 결합한 고유 색인 (비 클러스터)이 있습니다. 차원 테이블은 약물 목록 (70 행)입니다. 가입은 약물 키 (대리 키)를 기반으로 약물 코드 (비즈니스 코드)를 얻는 것입니다. 쿼리 :SQL Server 쿼리의 이상한 실행 계획
SELECT a.PKey, a.SomeFact, b.MCode
FROM tblFact a
JOIN tblDIM b ON a.MKey = b.MKey
반환되는 모든 열은 정수입니다. 위의 쿼리는 7 분 내에 실행되며 실행 계획에 (MKey, PKey)의 인덱스가 사용 된 것으로 표시됩니다. 색인은 실행 직전에 재구성되었습니다. 팩트 테이블에서 인덱스를 사용하지 않도록 설정하거나 같은 구조의 인덱스가없는 새 테이블에 데이터를 복사하면 동일한 쿼리에 단 1 분 40 분이 걸립니다.
입학 통계 또한 놀랍습니다.
인덱스 포함 : 테이블 'tblFACT'. 스캔 횟수 70, 논리적 읽기 190296338, 물리적 읽기 685138, 미리 읽기 98713
색인 없음 : 테이블 'tblFACT_copy'. 스캔 횟수 17, 논리적 읽기 468891, 물리적 읽기 0, 미리 읽기 419768
질문 : 왜 인덱스를 사용하여 비효율적 인 경로를 사용하려고합니까?
인덱스 정의와 실행 계획을 볼 수 있습니까? 색인으로 RID_LOOKUP을 수행해야합니까? –