(SQL Server 2008 R2), bir eşanlamlı bağlantılı sunucuya işaret syn_view1
denilen var remoteserver.remotedb.dbo.view1
Performans etkisi LocalServer On
Bu YAVAŞ sorgu çalıştırmak için 20 saniye sürer .
select e.column1, e.column2
from syn_view1 e
where e.column3 = 'xxx'
and e.column4 = 'yyy'
order by e.column1
Bu hızlı sorgu çalıştırmak için 1 saniye alır.
select e.column1, e.column2
from remoteserver.remotedb.dbo.view1 e
where e.column3 = 'xxx'
and e.column4 = 'yyy'
order by e.column1
İki sorgundaki tek fark, gerçekten eşanlamlılığın varlığıdır. Açıkçası, eşanlamlı sorgunun performansı üzerinde bir etkisi vardır.
YAVAŞ sorgu için yürütme planı:
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
Ve FAST sorgu için:
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
Benim anlayış YAVAŞ sorguda, sunucu tüm verileri getirir olmasıdır Uzak sunucu, daha sonra filtreyi (dizinsiz olsa da) uygular; FAST sorgusunda sunucu, filtrelenmiş verileri uzak sunucudan alır, böylece uzak dizinleri kullanır.
Hızlıyken eşanlamı kullanmanın bir yolu var mı? Belki bağlantılı sunucunun kurulumu? yerel veritabanı sunucusu
Yardımın için teşekkürler!
Uzak sunucuda bir yordam oluşturulmasını önerin. –
@AaronBertrand, ne değişecek? Dizinler kullanılacak mı?Bağlı sunucumun tam olarak nitelenmiş ismini saklı yordamımın içinde belirtmekten kaçınabiliyor muyuz? –
Evet ve evet. Ve görünüm yerine saklı yordam adı için eşanlamlı oluşturabilirsiniz. –