and ename = 'KING'; if l_count != 0 then dbms_output.put_line(e.ename); end if; end loop; end; 为了确定在基于规则的最优化中,哪一种子句性能更佳,不妨考虑一下,与外部查询相比,内部查询会返回多少行记录。许多情况下,EXISTS的表现更突出,这是因为,它需要你指定一个加入条件,这就可以调用一个INDEX扫描。尽管如此,如果该查询的结果很小的话,IN常常表现得更好。你通常都愿意运行那些能首先返回较少的结果的查询。 有些人尽量避免使用EXISTS子句,这是因为,它要求必须从该查询中返回一个结果,纵使这个结果根本就不会用到。由于个人喜好的原因,人们经常使用‘x’,1,0或零。从说明计划的输出我们可以看到,它显示了,最优化会一直使用0而拒绝接受你所有输入的其它任何值。许多开发人员有这样一种习惯,那就是经常输入一些常量。 如果你想运行一下你自己的测试,或者想看看其它的例子,以下是我使用的两个脚本: REM -- explain.sql - view plan from PLAN_TA页码:[1] [2] [3] [4] [5] [6] [7] [8] 第4页、共8页 |