Oracle执行缓慢

时间:2016-06-08 17:41:08

标签: sql oracle plsql oracle11g oracle-sqldeveloper

我在Oracle中使用where子句条件来检查与给定值类似的名称,它返回正确的结果,但运行速度非常慢。有没有更有效的方法来执行这种情况?谢谢。

 AND 
    (P5_ORGN_NAME IS  NULL OR

(D.ORGANIZATION_NAME LIKE '' || upper(P5_ORGN_NAME) || '%' OR D.FORMATTED_ORGANIZATION_NAME like
'' || local.pkg.orgname_format(upper(P5_ORGN_NAME)) || '%')
)

1 个答案:

答案 0 :(得分:2)

创建pkg.orgname_format函数DETERMINISTIC,以便Oracle知道不会为每一行反复运行它。

local.pkg包...

FUNCTION orgname_format (p_org_name VARCHAR2)
   RETURN VARCHAR2 DETERMINISTIC IS
BEGIN 
   ...
END;

这将告诉Oracle该函数始终为相同的输入参数值返回相同的值。知道这一点,Oracle可以执行一次该函数,而不是为查询中基础表中的每一行执行该函数。

当然,如果函数确实是确定性的,你只能使用它,听起来就是这样,从它的名字来判断。