缓慢的 Oracle 执行
Slow Oracle execution
我在 Oracle 中有这个 where 子句条件来检查与给定值相似的名称,它 returns 结果正确,但运行速度很慢。有没有更有效的方法来执行这个条件?谢谢。
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)) || '%')
)
创建 pkg.orgname_format
函数 DETERMINISTIC
这样 Oracle 就知道不要对每一行都重复 运行 它。
在您的 local.pkg
包裹中...
FUNCTION orgname_format (p_org_name VARCHAR2)
RETURN VARCHAR2 DETERMINISTIC IS
BEGIN
...
END;
这将告诉 Oracle 函数总是 returns 相同的输入参数值的相同值。知道这一点后,Oracle 可以执行该函数一次,而不是对查询中基础 table(s) 中的每一行都执行它。
当然,只有在函数确实是确定性的情况下才能使用它,从它的名称来看,它听起来确实如此。
我在 Oracle 中有这个 where 子句条件来检查与给定值相似的名称,它 returns 结果正确,但运行速度很慢。有没有更有效的方法来执行这个条件?谢谢。
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)) || '%')
)
创建 pkg.orgname_format
函数 DETERMINISTIC
这样 Oracle 就知道不要对每一行都重复 运行 它。
在您的 local.pkg
包裹中...
FUNCTION orgname_format (p_org_name VARCHAR2)
RETURN VARCHAR2 DETERMINISTIC IS
BEGIN
...
END;
这将告诉 Oracle 函数总是 returns 相同的输入参数值的相同值。知道这一点后,Oracle 可以执行该函数一次,而不是对查询中基础 table(s) 中的每一行都执行它。
当然,只有在函数确实是确定性的情况下才能使用它,从它的名称来看,它听起来确实如此。