ORACLE数据库中最快的是什么?优化一个SQL查询:调用一个函数或做一个连接?
呼叫select语句中的函数以检索单个值的每一行
SELECT field1, field2, F_GET_LIBELLE_STATUT(field2) FROM table1 WHERE ...
与简单的功能:
create or replace
FUNCTION "F_GET_LIBELLE_STATUT" (v_statut NUMBER) RETURN VARCHAR2 IS
tmpVar VARCHAR2(40);
BEGIN
select libelle into tmpVar from t_statut_ope where id_statut = v_statut;
RETURN tmpVar;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN '';
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END f_get_libelle_statut;
或做在select语句加入?
Select a.field1, a.field2, b.libelle
FROM table1 a LEFT JOIN t_statut_ope b ON b.id_statut = a.field2
WHERE ...
而且是同样的答案,如果我在选择,并在子句条件调用了大量的功能(十个或更多)?
感谢您的回答。
在这种特定的情况下,普通的加盟将跑赢功能,但这并不意味着它总是会。您应该始终考虑解决方案的执行计划并从中得出结论。 –
@Lieven - 我同意每个案件的优点。但是一个连接总是会比这里发布的查询函数更快。这是公理的。 – APC
@APC - 我倾向于同意,但我对诸如* always *和* never *的绝对声明保持警惕。 –