2016-03-28 24 views
0

OPENQUERY ve veritabanı bağlantılı sunucular kullanarak verileri bir SQL Server veritabanından diğerine taşımak için tasarlanmış bir dizi programımız vardır.SQL Server DELETE OPENQUERY performansı

Aşağıdaki gibi sorguların, siparişleri beklenenden uzun sürdüğünü fark ettik. Örneğin

DELETE OPENQUERY(server, 'SELECT * FROM table WHERE pkf1 = ''v1'' AND pkf2 = ''v2''') 

yukarıdaki gibi tekrar yazılabilir ise:

exec('DELETE * FROM table WHERE pkf1 = ''v1'' and pkf2 = ''v2''') at server 

veya

DELETE FROM server.schema.table WHERE pkf1 = 'v1' and pkf2 = 'v2' 

performansı OPENQUERY kullanarak birkaç dakika ile karşılaştırıldığında, sadece birkaç saniyedir.

Birisi, neden OPENQUERY yaklaşımının karşılaştırmaya göre neden verimsiz olduğunu açıklayabilir mi? Birincil anahtar indekslerini kullanmıyor mu?

+0

içinde çözmek olduğunu https://support.microsoft.com/en-us/kb/309182 – jthalliens

+0

"emirleri beklenenden uzun süre alıyor". Beklentiniz yanlış yönlendirildi. Sanırım yavaş sorgu, silmeden önce kayıtları yerel olarak aktarır ve hızlı olanlar bunu yapmaz. OPENQUERY bir sonuç kümesini yerel olarak döndürür ve diğer yöntemler işe yaramaz. Gerçi sunucuda 'sözdizimi' ile aşina değildi. İlginç. Elbette ki bu işlemlerin sunucuda istemcide olmadığını söyler. –

cevap

0

Açık sorgu SİL gibi basit sorguda daha iyi bir işleyicisi vardır ve sorgu burada bir göz atabilirsiniz uzak sunucu