2014-11-24 77 views
0

我有一個Web應用程序,它有大量的表和變量,用戶可以在運行時選擇(或不選擇)。事情是這樣的:帶有可配置變量的SQL查詢設計

在DB:

Table A 
Table B 
Table C 

在運行時,用戶可以選擇任意數量的變量返回。例如:

Result Display = A.field1, A.Field3, B.field19 

有超過100多個字段分佈在15個表格中,可以在單個結果集中返回。

我們有一個查詢,目前通過創建一個臨時表來選擇和聚合所需的字段,然後從該表中選擇所需的變量。但是,這個查詢需要一段時間才能執行(30秒)。我想嘗試找到一種更有效的方式來返回所需的結果,同時仍允許用戶配置要查看的變量。我知道這可以做到,因爲我已經看到它在其他領域完成了。有什麼建議麼?

回答

0

而不是使用臨時表,每次運行查詢時使用視圖並重新編譯視圖(或者僅使用子查詢或CTE而不是視圖)。 SQL Server可能能夠根據所選字段來優化視圖。

使用臨時表的最佳理由是在不需要日內更新時。然後,您可以在晚上創建「臨時」表格,然後從該表格中選擇。

查詢優化方法(無論是通過視圖,CTE還是子查詢)可能不夠。這是一個相當難解決的問題。但是,通常情況下,可能有來自特定子查詢的變量主題。如果是這樣,您可以編寫一個存儲過程來生成動態SQL,該動態SQL只對給定運行所選的變量具有必需的連接。然後使用該SQL從數據庫中提取。

最後,也許還有其他方法來優化查詢,而不管選擇的字段。如果你認爲可能是這種情況,那麼簡化人類消費查詢並提出另一個問題

+0

我們正在使用被認爲是軟視圖的代碼。它執行相同的功能。該頁面仍需要30秒才能刷新。 夜間臨時表的生成將無法正常工作,因爲關聯表在整個一天中都會得到更新,我們不能等到夜晚才能刷新所有內容。 我們正在使用存儲過程和子查詢。仍然會導致30秒的響應時間。 大男孩們已經找到了一種方法來做到這一點,因爲我可以看到他們的一些產品是如何工作的。任何想法他們如何做到這一點? – 2014-11-25 08:50:25