2011-08-30 35 views
0

我在7-10個獨立的表上有一個父行和子行,用一個唯一的鍵將子表上的行綁定到父行。對於搜索功能,我需要根據父表中的數據查詢來檢索父代和所有匹配的子代行。最多有5000個匹配的父行。目前,我們正在重新運行查詢對每個子表,如:如何在DB2中爲父行的特定子集獲取子行?

select data from child 
where key in (select key from parent where search_criteria) 

這似乎是相當不雅尤其是我們繼續添加更多的子表。在DB2中有更好的方法嗎?

我的一些想法:

  • 威爾DB2重用,結果選擇?那麼如果有大量的查詢呢?
  • 我知道父查詢後的關鍵字,所以我可以將它們傳遞給SQL,但SQL會因5000個關鍵點而變得瘋狂,並且可能超過了SQL限制。
  • 將密鑰存儲爲臨時表是否值得,或者設置/拆卸過多?
+0

什麼是消費這些數據?它是前端還是某種後端處理系統? –

+0

它是一個前端,最終用戶正在生成查詢(間接地,而不是通過提供SQL)。 –

+0

是否有某些原因,您沒有一次性從所有子表中獲取結果?一次獲得一個文件(本地I/O,尤其是SQL)通常不是最好的方式 - 儘管有時它是唯一的方法。我不認爲DB2會緩存內部選擇的結果 - 如果我沒有記錯的話,你可能會從顯式連接中獲得更好的性能。如果您仍然需要單獨查詢子表,那麼將鍵存儲在「GLOBAL TEMPORARY」表中可以正常工作(創建表時插入數據,不會從程序加載)。 –

回答

0

這聽起來像是使用RPG程序並使用調用/使用它的存儲過程的理想場景。這樣,你不會做這麼多次往返。將搜索條件傳遞給存儲過程,存儲過程調用RPG程序。讓RPG將'文件'鏈接在一起,這將加快您的查詢速度。