2010-04-01 104 views
-1

好吧,我承認我的情況特殊ResultSet和聚合

有支持SQL-92和JDBC接口

然而,SQL requets是相當昂貴的數據系統,並在我的應用程序需要多次檢索相同的數據,並在不同的字段中對其進行聚合(「group by」)以顯示同一數據的不同維度。

例如在一個屏幕上我有三個表,顯示同一組或記錄,而是由市(1格)聚集,通過人口(第二格),通過嬰兒的數量(第三格)

這相當於到3個SQL查詢(這是非常緩慢的),除非你們中的任何人都可以提出任何想法從apache commons或google代碼中獲得任何庫,以便我可以將所有記錄選擇到ResultSet中,並從此不同的字段獲得3個數據組數組單個ResultSet。

我錯過了這個問題的一些明顯的和意想不到的解決方案?

回答

1

如果您的數據庫支持物化視圖和索引視圖,您可以通過預先聚合視圖中的值並使用索引非常快速地檢索值來獲得顯着的性能。

您基本上創建了一個物化視圖,其中包含您需要的聚合然後對其進行索引。你可以加入它或者直接對它進行查詢。

根據您的數據City (1st grid), by Population (2nd grid), by number of babies (3rd grid)我不認爲這種開銷會損害插入/更新/刪除那麼多。

+0

這樣就意味着我需要爲每一個查詢創建視圖,查詢視圖使用相同的SQL與不同的「group by」然後刪除視圖?數據系統是「只讀」的,沒有插入和更新,只是選擇。 – kachanov 2010-04-01 14:10:14

+0

不,創建一個物化視圖'CityView'即'SELECT City,彙總(xyz)爲xyz FROM YourTable GROUP BY City',然後可以'SELECT * FROM CityView WHERE ...',結果將比之前。爲每個做這個。如果這是不可能的,你需要解釋更多關於你的情況,給出表中的列,你分組了多少不同的東西,你有什麼索引,你使用的是什麼數據庫。 – 2010-04-01 14:16:09

+0

hm,感謝您的提示。如果這不是真實的數據庫,我需要了解更多關於視圖 – kachanov 2010-04-01 14:21:47