2010-06-17 51 views
0

我們有供應商交付的數據庫,至此我已能夠避免對數據庫結構進行任何更改。我們很快將直接直接查詢相關項目的表格。爲了提取我們需要的所有數據,我們需要創建一個包含多個聯合的大型SQL語句。將視圖添加到供應商交付的數據庫和性能

select ... from table1 
union 
select ... from table2 
... 
select ... from tableN 

速度是這個項目的最高優先級。創建一個視圖來執行連接,然後查詢這個視圖(從而更改供應商數據庫)或者只是從我們的應用程序運行union語句,會更快嗎?

我知道更改供應商數據庫所涉及的潛在問題,因此我爲什麼要查找反饋。

回答

1

當涉及到供應商數據庫時,我會非常猶豫地對任何現有的表進行更改。添加類似視圖的東西似乎更安全一些,因爲您是唯一使用它的人。我最關心的觀點是,如果您從供應商那裏得到了更新的更新,您可能會失去視圖。

我不認爲你會看到使用該視圖的任何性能收益,除非你使用了索引視圖。不幸的是,你不能在使用聯合創建的視圖上創建索引(至少在SQL Server中)。

就個人而言,當涉及到將邏輯放在應用程序中,並將其放入數據庫中時,我傾向於DB。根據我的經驗,這些類型的更改更易於部署和維護。

如果我在你的情況,我會繼續創建視圖,如果它會讓你的生活更輕鬆。但是,不要指望性能收益。

+0

我的擔心與您的修改相同,我們會仔細記錄(並存檔)視圖,以便我們快速更改/更新視圖。 我不是很熟悉SQL服務器如何處理數據以瞭解我在哪裏知道iSeries如何處理數據。 感謝您的信息。 – 2010-06-17 18:47:43

1

否視圖不會更快(開發時間除外)。

更快的是使用UNION ALL如果它能工作。 UNION查找重複記錄並將其從最終結果中刪除。如果您知道設計中的記錄(例如每個表格用於不同的數據庫或每個表格具有不同的日期範圍)都不能重複,則UNION ALL不會嘗試對結果集進行DISTINCT,從而運行得更快。