2012-01-06 738 views
2

我有一個存儲過程,不僅規模巨大,而且耗費巨大的內存是。此第一個存儲過程是爲詳細報告創建的。第二個存儲過程調用第一個存儲過程,將信息放入臨時表中,然後從該臨時表中選擇信息並進行彙總。現在總結從一個存儲過程的信息在另一個存儲過程

,第二個存儲過程並不需要所有的細節存儲過程的信息,只需要一些吧。

我們的數據庫管理員稱這種做法魯莽,並取得了其他建議,如「使其每天運行一次堅持這一個真正的表」。這實際上不會發生,因爲許多用戶每天可以運行多次報告,並且可以運行不同的日期範圍。他的另一個建議是SUM沒有臨時表,但我不確定你如何從一個存儲過程中選擇某些字段。

我有兩個問題:如何在不使用臨時表的情況下遵循SUM的第二個建議,如果無法完成,是否有人對使用總結摘要所需數據的最佳方法有任何建議報告?

這些存儲過程兩者都是單獨的報告。一個是細節,另一個是總結。最終用戶可以爲不同的商店和不同的時間段運行它們。

回答

1

爲什麼不把數據在視圖中,並打從兩個存儲特效的看法?這會降低兩個特效的複雜度(但將其移至視圖中)。

根據您的查詢的結構,你可以甚至可能創造條件,創建數據的持久化的形式,並允許您利用索引的索引視圖。

+0

這將如何工作時,最終用戶可以任何時間段的運行呢? – DataGirl 2012-01-09 15:04:30

+1

您必須在視圖中包含需要過濾的所有列。因此,如果您有過濾的開始或結束日期,則需要將其從填充視圖的where子句中移除,並將其包含在存儲的proc邏輯中。 – 2012-01-09 16:09:07

1

如果選擇在內部SP是靜靜簡單 - 嘗試@Abe注意到

如果數據不能簡單的圖中呈現的方式,你有兩種方式:

  1. 改寫外PROC獲取只需數據,而無需使用你的內心SP的方式
  2. 傳輸只需要通外臨時數據或持久表臨時表的
    • 好處 - 你可以使用索引,沒有需求ŧ Ø保持這已經不需要持久表
    • 好處一樣的數據,除了可以更微調它,譚臨時表< 你操心表cleanul,因此 - 要引進像會議關鍵有效期外清理
+0

我有一張臨時表,但DBA說我無法使用它。 – DataGirl 2012-01-09 15:10:23

相關問題