Sql-Server
雙連結伺服器上的索引視圖
伺服器 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 上以某種方式定義它?
- 在 SERVER_B 上使用索引視圖是否會以任何方式影響 SERVER_A 的性能,即使視圖沒有被使用?
您不能在連結伺服器表上創建索引視圖。
根據 BOL http://msdn.microsoft.com/en-us/library/ms191432.aspx “視圖必須僅引用與視圖位於同一數據庫中的基表。”
為了提高性能,您可以在伺服器 C 上創建伺服器 A 的數據副本並按計劃更新它,或者如果可能的話使用複制。如果您不需要太“實時”的數據,有時它會起作用。
OPENQUERY
每次執行查詢時都會傳輸整個數據集。