ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于table()函数用于IN/EXISTS查询的执行计划

关于table()函数用于IN/EXISTS查询的执行计划

原创 Linux操作系统 作者:davidyu720 时间:2019-01-30 16:39:04 0 删除 编辑

1)IN EXISTS 查询的有关hint
HASH_SJ NL_SJ MERGE_SJ
HASH_AJ NL_AJ MERGE_AJ
2)如果子查询中是正常表(或者临时表),执行计划一般会走HASH JOIN (SEMI)
可是如果是table()表,执行计划一般NESTED LOOPS (SEMI)。
如此则效率会较低;可以进行 /*+ HASH_SJ */ 提示


1)IN EXISTS 查询的有关hint
HASH_SJ NL_SJ MERGE_SJ
HASH_AJ NL_AJ MERGE_AJ
2)如果子查询中是正常表(或者临时表),执行计划一般会走HASH JOIN (SEMI)
可是如果是table()表,执行计划一般NESTED LOOPS (SEMI)。
如此则效率会较低;可以进行 /*+ HASH_SJ */ 提示
eg.
select content
from t_record t
where t.stamp > trunc(sysdate)
and provinceid in
(select column_value from table(pck_rpt.f_comma_to_table('1,8,1,9,10,11,')))
--(select to_number(c_value) from xyz_temp)

-- 按照上面的结论,可以加入hint提示,没想到却出现600内部错误!
--ORA-00600: internal error code, arguments: [15160], [], [], [], [], [], [], []
select content
from t_record t
where t.stamp > trunc(sysdate)
and provinceid in
(select /*+ HASH_SJ */ column_value from table(pck_rpt.f_comma_to_table('1,8,1,9,10,11,')))

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9844649/viewspace-579989/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-08-18

  • 博文量
    235
  • 访问量
    182408