4

我有一个关于在 sql 查询中使用函数的问题。

我有以下用于从表中获取用户名的功能

CREATE OR REPLACE
  FUNCTION get_info(
      p_emp_no employees.emp_id%TYPE)
    RETURN VARCHAR2
  AS
    o_userid employees.emp_name%TYPE;
  BEGIN
    SELECT emp_name INTO o_userid FROM employees WHERE emp_id = p_emp_no;
    RETURN o_userid;
  END;
  /

当我在 sql 代码中使用上述函数时

select product_no, get_info(p.raised_by)
from products p, employees e
where p.raised_by  = e.emp_no

执行比下面的 sql 花费更多的时间

select product_no, e.emp_name
from products p, employees e
where p.raised_by  = e.emp_no

第二个查询比第一个查询快。

那么是否建议使用函数从表中获取用户名或使用直接列名并使用连接来链接员工表?

我问的原因是可能有多个对员工表的引用来获取raise_by、created_by、modified_by等的用户名。所以我认为使用函数来获取 emp_name 而不是与员工表的多个连接会更好。

对此的任何见解都是非常可观的。

谢谢

4

1 回答 1

4

使用连接是要走的路。使用该函数将触发一个单独的查询,对每一行结果进行单独的索引查找,从而大大减慢了结果的速度。

我理解您希望避免多次连接,但在您的示例中,三个连接比三个函数调用要好。

这样想吧。该功能正在做它自己的加入

WHERE emp_id = p_emp_no

而且它不仅是做一次,而且是对每一行单独的加入!

于 2012-12-18T05:47:58.373 回答