클러스터되지 않은 키를 통해 레코드를 선택해야하는 큰 테이블이 SQL Server 2005에 있는데 최선을 다해이 프로세스를 최적화하려고합니다.일관되지 않은 SQL Server 실행 계획 키 조회
테이블에 많은 열이 있고 세 개의 다른 열에 클러스터되지 않은 인덱스를 추가했습니다.
SELECT * FROM table WHERE Field1 = 10;
SELECT * FROM table WHERE Field2 = 40;
SELECT * FROM table WHERE Field3 = 'A';
Field1과 Field2는 정수 필드이고 Field3은 varchar입니다.
SELECT -> Nested Loop -> Index Seek
-> Key Lookup
하지만 그 실행 시간이 크게 일치하지 않는 것을 발견 : 나는이 세 가지 쿼리에 대한 SQL 서버에서 예상 쿼리 실행 계획을 요청하면
, 나는 각각에 대해 기본적으로 같은 계획을 얻을. 특히 두 번째 쿼리는 전체 쿼리 비용의 98 %를 차지합니다. Key Lookup 단계의 비용이 Index Seek에 비해 100 %라는 점을 제외하면 실행 계획은 다른 항목과 동일합니다. 다른 두 쿼리에서는 50 %에 가깝습니다.
키 조회가 바람직하지 않으며 여분의 열을 조회 할 필요가 없도록 인덱스에 열을 추가하여 피할 수 있음을 알고 있습니다. 그러나이 경우 테이블의 모든 열을 반환해야 인덱스에 모두 추가하는 것이 좋습니다. 그러나 어떻게 하나의 색인으로 인해 Key Lookup 작업이 다른 Key Lookup보다 오래 걸릴 수 있습니까?