(A SQL 서버 2008 R2), I는 동의어가 연결된 서버를 가리키는 syn_view1
라는이는 remoteserver.remotedb.dbo.view1
성능 효과는 localserver에
이 SLOW 쿼리를 실행 20초에게 소요 .
는select e.column1, e.column2
from syn_view1 e
where e.column3 = 'xxx'
and e.column4 = 'yyy'
order by e.column1
이 FAST 쿼리를 실행 일초 걸립니다.
select e.column1, e.column2
from remoteserver.remotedb.dbo.view1 e
where e.column3 = 'xxx'
and e.column4 = 'yyy'
order by e.column1
두 쿼리의 유일한 차이점은 실제로 동의어입니다. 분명히 동의어는 쿼리 성능에 영향을 미칩니다.
슬로우 쿼리에 대한 실행 계획은 다음과 같습니다
Plan Cost % Subtree cost
4 SELECT
I/O cost: 0.000000 CPU cost: 0.000000 Executes: 0
Cost: 0.000000 0.00 3.3521
3 Filter
I/O cost: 0.000000 CPU cost: 0.008800 Executes: 1
Cost: 0.008800 0.26 3.3521
2 Compute Scalar
I/O cost: 0.000000 CPU cost: 3.343333 Executes: 1
Cost: 0.000000 0.00 3.3433
1 Remote Query
I/O cost: 0.000000 CPU cost: 3.343333 Executes: 1
Cost: 3.343333 99.74 3.3433
그리고 FAST 쿼리 :
Plan Cost % Subtree cost
3 SELECT
I/O cost: 0.000000 CPU cost: 0.000000 Executes: 0
Cost: 0.000000 0.00 0.1974
2 Compute Scalar
I/O cost: 0.000000 CPU cost: 0.197447 Executes: 1
Cost: 0.000000 0.00 0.1974
1 Remote Query
I/O cost: 0.000000 CPU cost: 0.197447 Executes: 1
Cost: 0.197447 100.00 0.1974
나의 이해는 SLOW 쿼리에서, 서버는 모든 데이터를 가져 오는 것입니다 원격 서버는 FAST 쿼리에서 서버가 필터링 된 데이터를 원격 서버에서 가져와 원격 인덱스를 사용하는 반면 인덱스는 없지만 필터를 적용합니다.
빠른 속도로 동의어를 사용할 수 있습니까? 아마도 연결된 서버의 설정입니까? 로컬 데이터베이스 서버?
도움 주셔서 감사합니다.
원격 서버에서 프로 시저를 만들 것을 제안하십시오. –
@AaronBertrand, 무엇이 바뀌겠습니까? 인덱스를 사용합니까?내 저장 프로 시저 내에서 연결된 서버의 전체 정규화 된 이름을 지정하지 않아도됩니까? –
예와 예. 그리고 뷰 대신 스토어드 프로 시저 이름의 동의어를 작성할 수 있습니다. –