Sql-Server
SQL Server Linked Server to Progress 使用 openquery 視圖很慢
我們有一個 SQL Server 數據庫設置,其中一個連結伺服器設置連接到 Progress OpenEdge 數據庫。我們使用類似於以下的程式碼創建了一些 OpenEdge 表的 SQL Server 視圖(用於與 SSRS 一起使用):
CREATE VIEW accounts AS SELECT * FROM OPENQUERY(myLinkedServerName, 'SELECT * FROM PUB.accounts') CREATE VIEW clients AS SELECT * FROM OPENQUERY(myLinkedServerName, 'SELECT * FROM PUB.clients')
由於某種原因,查詢似乎帶回了整個表,然後在 SQL 端進行過濾,而不是在 Progress 端執行查詢。我是開發人員而不是 DBA,所以我希望專家可以為我提供解決方案或至少解釋原因。
謝謝。
我們所做的是將視圖全部轉儲在一起,並添加執行 openquery 的儲存過程,這些儲存過程具有一組有限的返回值和一個受限的 where 子句。我們還與進步一起工作,他們也推薦了一些優化。性能仍然不是很好,但比以前好多了。我們正在從 Progress 後端遷移到 SQL,這是啟用 Report Designer 的一個步驟,它完成了。在數據完全遷移到 SQL Server 環境之前,我們不會開始深入研究性能。
在上面的查詢中,每次有人查看您的視圖時,
OPENQUERY
都會在您的伺服器上執行為什麼不執行一項將數據從進度伺服器傳輸到 sql 伺服器並在本地創建指向伺服器中表的視圖的作業。
那會快得多
CREATE PROCEDURE [dbo].[copydatafromProgress] AS BEGIN insert into tbl_accounts SELECT * FROM OPENQUERY(myLinkedServerName,'SELECT * FROM PUB.accounts') insert into tbl_clients SELECT * FROM OPENQUERY(myLinkedServerName,'SELECT * FROM PUB.clients') End CREATE VIEW accounts AS SELECT * FROM tbl_accounts CREATE VIEW clients AS SELECT * FROM tbl_clients
之後,創建一個每天執行一次儲存過程的作業,或者根據您需要的時間表。