2011-08-30 22 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将'文件'链接在一起,这将加快您的查询速度。