是否具有绑定变量的子句/子句/ With子句与集合/集合的成员

时间:2016-04-18 10:32:27

标签: sql oracle performance oracle10g

我试图在Oracle PL / SQL(10g)中优化大查询(没有子查询但是大表大小)。首先,我从连接中删除了几个表,并缓存了它们在集合中返回的数据(嵌套表是特定的),这导致了两个选择

示例: (比如变量名称是缓存),原始查询中的条件是

HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\BusinessRules\3.0\

选项1

where a.col_in_a = b.col_in_b;

so I changed it to,
select b.col_in_b bulk collect into cache from b where -- some conditions;

选项2

where a.col_in_a member of cache;

问题1:上述哪一项更好。

更进一步,我还可以选择不使用集合,只需使用with子句和materialize提示

where a.col_in_b in (select column_value from table(cache));

问题2使用集合或with子句缓存

一旦我做出这个决定,我想让这个新的查询有点灵活,即让它变得动态,几个表和条件在这里和那里稍微改变。这让我有两个选择 1.执行即时查询'大选择查询' 2. OPEN-WITH-FOR'大选择查询'

因为我将这个大查询的结果存储在引用游标中,我相信OPEN-WITH-FOR是可行的方法。这导致我以两种方式编写动态查询

问题3:如何按照问题1中提到的方式制作类似下面的内容,哪个最好? 使用dummyCache with cache as (SELECT /*+ materialize */ col_in_b from b where -- some condtions ) select col_in_a from a,b where a.col_in_b = cache.col_in_b; 其中,dummyCache可以是逗号分隔的字符串列表,或者我可以使用绑定变量传递嵌套表并使用子句成员。我不知道如何使其工作..

我希望我已经尝试过清楚解释。要求所有人建议我一些更好的方式..

0 个答案:

没有答案