2011-09-14 44 views
1

我正在處理一些基於時間的行並存在於不同數據庫中的表。這個想法是編寫存儲過程來獲取和最終處理數據,這反過來會利用很多連接,這將導致大量的數據。然後我會執行某種聚合邏輯來獲取所需的數據。我怎樣才能使用視圖和索引來提高性能

這樣的存儲可能需要使用循環等,並會很慢。

我可以使用視圖來創建一個已經是僅包含需要的行(從連接和聚合獲得)的短列表的表。我在這裏錯過了一些基礎知識: 1.視圖只在運行時獲取數據嗎?如果他們這樣做,我怎麼能用它們來提高性能。 2.我可以使用索引來提高這種視圖的性能嗎? 3.遊標比循環更快嗎?我知道我可以使用某種查詢來避免循環 - 但假設如果我必須使用循環,遊標會是更好的選擇嗎?

謝謝...

+0

CUrspors和循環同樣很糟糕,您爲什麼認爲需要循環? – HLGEM

回答

0

索引視圖可以提高性能,但對他們的在線閱讀書籍,因爲有很多很多的限制,對什麼樣的觀點可以被索引。只要滿足索引視圖必須符合的其他條件,它們確實可以幫助進行聚合。調用其他視圖的視圖可能會大大降低性能,請勿使用它們。

爲了提高性能的聚集,如果你不能使用索引視圖來解決你的問題,一個策略是將聚合值存儲在通過觸發數據的變化隨時更新的表。這樣,計算僅對每次數據更改執行一次,而不是在選擇查詢中重複多次。觸發器必須仔細書寫並處理多個記錄插入/更新/刪除。如果聚合可能會與實時略有不同步,那麼可以這樣做,而不是觸發器。

應用程序代碼很少需要遊標和循環。他們的真正用途通常是數據庫管理任務。爲了幫助您理解比循環更好的方法,請閱讀下面的內容: http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them

+0

太棒了。這非常有見地...... – Tintin