以前做过一个项目,因为特殊原因 在很多查询的中使用了函数取值,

表A
  ID,name,age
表B
ID,Class,Score如果获得某个人的成绩信息 一般的查询
是这样写
  select B.ID,A.Name,A.age,B.Class,B.score
from B left join A
   on B.id=A.id但我曾经用过这样的方法 Create function getName(mID number) varchar2
as
  ret varchar(20)
begin
  select name into ret from A where ID=mID;
  return ret; 
end;然后再 select ID,getName(ID),score
 from B
效率感觉比用Left join 效率要高?
这个只是个例子,实际上比这个可能要复杂一点
有谁能对这个问题进行解释一下吗?

解决方案 »

  1.   

    left jion会产生交叉积。
    你用function不会
      

  2.   

    如果只选择一条记录,效率差不多,
    如果是多条记录,似乎应该是left jion效率高才对!
      

  3.   

    要看执行计划,这是最准的。
    不过记录多的话,通常left jion会快。
      

  4.   

    to: CathySun118 
    left   jion会产生交叉积。 
    你用function不会你的观点是什么? function会快一点? 
      

  5.   

    1 准确的还是要依照查询计划2 function应该是在内存中对每行记录指定列再做Hash Join再更新 效率应该比较低的