2013-07-17 58 views
0

我有一個視圖(視圖A),從多個表中拉列。它還從另一個視圖(視圖B)中提取一列,該視圖從鏈接服務器表中獲取其數據。內部加入速度問題(鏈接服務器列)

現在,View B運行良好,大約在一秒鐘內拉回11,000行。視圖A也運行良好。但是,如果我從鏈接服務器來的列中的視圖A到視圖B的INNER JOIN聯接,則整個查詢運行速度如此之慢以至於超時。

如果我INNER從View A JOIN查看B關於不來自鏈接服務器的列,它運行良好。

所以我追溯到加入鏈接服務器上的一列的問題。我只是不知道如何解決它。

任何人都可以給我任何指針?

+0

如果A包含來自B的列,並且您在這些列上加入A到B,那麼您基本上是在對鏈接服務器執行自連接(較慢)。你能提供模式嗎?也許你不需要加入。 – Anon

+0

我可以在Activity Monitor中看到需要花費大量時間的查詢。我沒有寫這個,所以我假設它的SQL從鏈接服務器獲取數據。查詢說:「SELECT * FROM OpenRowset(TABLE TRCDATA,@traceid,@records)」。 – creatiive

回答

1

的情況略有不同,但無論我的同事和我所看到的證據表明,如果你有這樣的事情:

select something 
from LinkedServer.DataBase.Owner.Table 
where whatever 

那麼SQL Server將來自其它服務器的第一選擇整個表格,然後應用where子句。這可能發生在你身上。

我們解決通過使用以上所示的完全限定的方法的OPENQUERY代替,並通過將OPENQUERY結果到一個臨時表的問題。然後我們加入臨時表。