當需要具有嵌套計算查詢一打,就是它更優化到
- A)單獨執行每個操作(保存到一個表中的每個結果然後讀取用於下一個查詢表)
- B)有一大組嵌套選擇
完整說明:
我試圖從SQL一系列輸入表的計算一些先進的預測。
我正在構建圍繞着十幾個「模塊」分離成自己的模式,每個模塊通常包括4-10個輸入表和6-10個計算步驟。一旦完成,每個模塊的所有輸出都被轉儲到同一個輸出表中。
查詢範圍從7k-200k行。
單個模式的/模塊的表可能看起來像這樣:
- 輸入表1
- 輸入表2
- 輸入表3
- 輸入表4
- 計算查詢1個結果表
- 計算查詢2結果表
- Calculati上查詢3結果表
- 計算查詢4結果表
- 計算查詢5結果表
計算查詢6結果表
最終輸出
每個計算查詢使用的結果(大部分)。最終輸出是最終計算查詢的結果。計算不是很複雜:最大分割,基本公式(+, - ,*,/)或SUM等。正常情況下,每個計算步驟中只有這些中的1-3個總是在同一列上。
這是拆分爲多個計算查詢(而不是一個超級公式)的主要原因是每個計算以不同的方式連接輸出並使用不同的輸入表;也因爲有些基於上一行結果。 (如MAX分區或滯後)
我的要求如下:
- ,其計算來自步驟1的最終輸出和合併到最終輸出的過程。
- 一個計算直到所選計算查詢併合併到其各自結果表(並停止)的過程。考慮這次「壓倒一切的最後的」
我DONT需要存儲中間查詢的計算結果 - 僅最終的輸出或「壓倒一切的最後的」如果選擇。
我的問題: 我想優化整個過程 - 在這一點上它看起來將需要大約10-15秒。我希望它是1秒 - 但我很欣賞這可能是不可能的。
我曾嘗試:
首先,我創建該合併的結果到其相應的輸出表中的每個計算查詢的單個過程。使用這種方法,每個計算查詢必須從數據庫中讀取,然後合併到其輸出中。
我試過臨時表,但是我不明白爲什麼這會是最優的,因爲我已經有了計算步驟的表格 - 這些表格已經考慮到了下一步的索引。
然後,我做了一個假設,將所有查詢嵌套到一個超級過程或者甚至可以有一系列表函數會更快。
我的問題:
但是我遇到了一個想法,我無法找到一個答案 - 這是以下幾點:
- 插入結果到一個表上的每一個計算步驟可能會放緩該過程(特別是因爲他們被索引2-4列);但至少數據將被編入索引爲下一步。
- 嵌套選擇將節省插入數據的努力,但這些結果不會被索引?對?還是錯了?
智能索引的選擇結果是?考慮到我的情況,你會告訴我如何處理這個問題。也許我錯過了一些非常簡單的事情。
附加信息:
- 我的大部分大的查詢結果(150-200K)有4列需要建立索引。
- 我所有的表格只有一列需要計算 - 其餘的都是索引的。
例如: ForecastID,集團年,類型,子類型,值
所以我要指標組,年,類型和子類型來加入多個輸入表,然後計算出上值列。
我告訴你,如果索引繁重的表影響你的建議 - 我不會在這裏尋求優化索引的幫助,因爲已經有大量的建議可用,因爲這是一個不同的問題!
如果您可以顯示一些輸入和輸出,您將得到更多回復。 – LoztInSpace