我可以这样使用吗?
select /*+ MAPJOIN(t2)*//*+ STREAMTABLE(t1)*/
t1.c1.
t2.c1
from t1
left outer join t2
on t1.c1 = t2.c1;
我对不同的连接键上的“STREAMTABLE”感到困惑。
例如: t3是最大的表,t2是次要的大表,t1是最小的表。
select
/*+ STREAMTABLE(t2)*/
t1.c3,
t2.c2,
t3.c3
from t2
left outer join
t1
on t2.c1=t1.c1
left outer join
t3 on t2.c2=t3.c2;
所以,如果当t2加入t1时它没关系。但是当t2加入t3时,如果t2仍被视为大表? 怎么能处理这种情况?
答案 0 :(得分:0)
您可以通过以下方式实现此目的:
select /*+ MAPJOIN(t2), STREAMTABLE(t1)*/
t1.c1.
t2.c1
from t1
left outer join t2
on t1.c1 = t2.c1;
您可能仍会遇到一些非常重要的与CBO相关的缺陷,特别是在我的经验中涉及窗口函数和柱状格式。因此,知道如何有效地应用提示是有用的。
答案 1 :(得分:-1)
我认为我们不需要在这里提供MAPJOIN,因为其他表除外,streamtable将被缓冲/缓存到所有节点中。因此它会自动变为mapjoin。