IG 查询中的 Oracle Apex 功能会减慢应用程序速度

问题描述 投票:0回答:1

我有一个使用以下查询的顶点交互式网格:

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 的替代方案的建议?

sql performance oracle-apex
1个回答
0
投票

每个

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;
© www.soinside.com 2019 - 2024. All rights reserved.