Sql-Server

雙連結伺服器上的索引視圖

  • October 14, 2014

伺服器 SERVER_A 有一些數據。

伺服器 SERVER_B 將 A 定義為連結伺服器,並定義了一些數據視圖。查詢是這樣的:

CREATE view myview as
select * from 
openquery ( SERVER_A, select .... )

伺服器 SERVER_C 將 B 定義為連結伺服器。

我擁有對 SERVER_C 的完全訪問權限,我可以要求對 SERVER_B 進行一些更改,但不能對 SERVER_A 進行一些更改。我所有的應用程序都將訪問伺服器 SERVER_C,並且需要來自 SERVER_A 的數據。SERVER_B 上的視圖非常複雜,它們會在返回任何內容之前導致超時。

我認為為了提高這些查詢的性能,我需要將 SERVER_B 上的視圖轉換為“索引視圖”。要索引視圖,我必須創建一個聚集索引。

問題:

1)我應該在哪裡定義聚集索引?它應該在 SERVER_B,還是我可以在 SERVER_C 上以某種方式定義它?

  1. 在 SERVER_B 上使用索引視圖是否會以任何方式影響 SERVER_A 的性能,即使視圖沒有被使用?

您不能在連結伺服器表上創建索引視圖。

根據 BOL http://msdn.microsoft.com/en-us/library/ms191432.aspx “視圖必須僅引用與視圖位於同一數據庫中的基表。”

為了提高性能,您可以在伺服器 C 上創建伺服器 A 的數據副本並按計劃更新它,或者如果可能的話使用複制。如果您不需要太“實時”的數據,有時它會起作用。OPENQUERY每次執行查詢時都會傳輸整個數據集。

引用自:https://dba.stackexchange.com/questions/80125