我有一个使用以下查询的顶点交互式网格:
select emp_id, get_emp_count(emp_id),emp_grade,emp_org,emp_unit from employees;
查询使用的函数get_emp_count是这样的:
select count(*) from (select emp_id,emp_grade,emp_sal,emp_dept,emp_unit from employees a where (nvl(emp_id,0),nvl(emp_grade,'~'),nvl(emp_sal,0),nvl(emp_dept,'~'),nvl(emp_unit,'~')) not in
select nvl(emp_id,0),nvl(emp_grade,'~'),nvl(emp_sal,0),nvl(emp_dept,'~'),nvl(emp_unit,'~') from employees_backup b
where a.emp_id=b.emp_id);
此查询正在减慢应用程序页面的速度。
需要有关如何调整或 nvl 的替代方案的建议?
)
每个
employees_backup
表包含多少行emp_id
?您发布的查询表明可能有“0 - n”行,因为您正在比较所有(?)列。如果最多可以有一行,也许您应该只检查该表中是否存在 emp_id
。
另一种选择可能是这样的;我不知道它是否会比你当前的功能表现得更好、相同或更差,但是 - 你可以尝试一下,看看会发生什么。
CREATE OR REPLACE FUNCTION get_emp_count (par_emp_id IN employees.emp_id%TYPE)
RETURN NUMBER
IS
retval NUMBER;
BEGIN
SELECT COUNT (*)
INTO retval
FROM (
SELECT emp_id,
emp_grade,
emp_sal,
emp_dept,
emp_unit
FROM employees
WHERE emp_id = par_emp_id
MINUS
SELECT emp_id,
emp_grade,
emp_sal,
emp_dept,
emp_unit
FROM employees_backup
WHERE emp_id = par_emp_id
);
RETURN retval;
END;