열이 포함되어 있으면 쿼리 성능이 영향을 받지만 열이 포함되어 있으면 긍정적 인 (시간 실행 줄임)에 영향을줍니다.열을 포함하면 쿼리 성능이 향상됩니다.
쿼리는 몇 뷰, 일부 테이블에 조인과 같은 기능을 평가 상정 포함 다음 :
SELECT
v1.field1, t2.field2
FROM
view v1 WITH (nolock)
INNER JOIN
table t1 WITH (nolock) ON v.field1 = t1.field1
INNER JOIN
table2 t2 WITH (nolock) ON t2.field2 = t1.field2
INNER JOIN
function1(@param) f1 ON f1.field3 = t2.field3
WHERE
(v.date1 = @param OR v.date2 = @param)
내가보기의 일부 (인 select
varchar(200) not null
열 내에 포함 할 경우 문제는있다 원래 테이블이나 뷰에서 인덱싱되지 않고 제약 조건이 아님), 쿼리 성능은 X 초입니다. 그러나이를 포함하지 않으면 성능이 4 배속으로 향상됩니다. 이는 많은 차이가 있습니다 단지 칼럼을 포함하기 위해서;
SELECT
v1.field1, t2.field2, v1.fieldWhichAffectsPerformance
view v1 WITH (nolock)
INNER JOIN
table t1 WITH (nolock) ON v.field1 = t1.field1
INNER JOIN
table2 t2 WITH (nolock) ON t2.field2 = t1.field2
INNER JOIN
function1(@param) f1 ON f1.field3 = t2.field3
WHERE
(v.date1 = @param OR v.date2 = @param)
그것은,하지만 부정적으로 실제 성능에 영향을주지 않고 쿼리 성능을 향상 열을 제거하기 위해 필수입니다 : 그래서 최적의 성능으로 쿼리처럼 될 것입니다. 어떤 아이디어?
EDIT : 제안 된대로 실행 계획을 검토 한 결과 열이없는 쿼리가 추가 해시 일치 (왼쪽 외부 조인)를 실행하고 인덱스 스캔을 사용하여 많은 CPU 비용이 소요되는 인덱스 검색을 사용합니다. 포함 된 열의 쿼리. 성능에 영향을 미치지 않고 어떻게 컬럼을 제거 할 수 있습니까? 어떤 아이디어?
select의 열과 함께 실행 계획을 게시하십시오. 통계가 최신인지 확인하십시오. –
[나쁜 습관을 걷어차 - 어디에서나 NOLOCK을 퍼트십시오] (http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/) - 권장하지 않습니다. * 어디서나 이것을 사용하십시오 - 그 반대입니다! –
정렬이 사용되지 않습니다. – oswaldomm2