Saya memiliki dua server basis data, terhubung melalui Server Tertaut. Keduanya adalah database SQL Server 2008R2, dan koneksi server tertaut dibuat melalui tautan "SQL Server" biasa, menggunakan konteks keamanan login saat ini. Server yang ditautkan keduanya berada di pusat data yang sama, sehingga koneksi tidak menjadi masalah.
Saya menggunakan kueri berikut untuk memeriksa nilai kolom mana identifier
yang tersedia dari jarak jauh, tetapi tidak secara lokal.
SELECT
identifier
FROM LinkedServer.RemoteDb.schema.[TableName]
EXCEPT
SELECT DISTINCT
identifier
FROM LocalDb.schema.[TableName]
Di kedua tabel adalah indeks non-cluster di kolom identifier
. Secara lokal sekitar 2,6 juta baris, hanya berjarak 54. Namun, ketika melihat rencana kueri, 70% dari waktu eksekusi dikhususkan untuk "mengeksekusi kueri jarak jauh". Juga, ketika mempelajari rencana kueri yang lengkap, jumlah baris lokal yang diestimasi 1
bukan 2695380
(yang merupakan jumlah baris yang diestimasikan ketika memilih hanya query yang datang setelahnya EXCEPT
).
Saat menjalankan kueri ini, memang butuh waktu lama.
Itu membuat saya bertanya-tanya: Mengapa ini? Apakah perkiraan "hanya" jauh, atau apakah pertanyaan jarak jauh pada server yang terhubung benar-benar mahal?