我有一个迭代报告,并且启用了分页,这导致查询需要 16 秒才能完成。我读了一些有关它的信息
以及禁用分页和可返回行的最大数量。现在,Apex 中生成的查询在 PL/SQL 中非常快。问题是,在网络上仍然需要很长时间。我使用了调试器,仍然需要 16 秒。有谁知道可能是什么问题吗?
我原来的查询。
SELECT '' Link,
C.CHA_IN_CODIGO "Cod",
C.CHA_ST_ASSUNTO "Assunto",
C.CHA_DT_ABERTURA "Dt Abertura",
C.CHA_ST_STATUS "Status",
C.CHA_ST_TIPO "Tipo",
U.USU_ST_NOME "Solicitante",
CA.CAT_ST_DESCRICAO "Categoria",
L.ORF_ST_DESCRICAO "Localização"
FROM INF_CHAMADOS C
INNER JOIN GLO_USUARIO U
ON U.USU_IN_CODIGO = C.USU_IN_CODIGO
INNER JOIN GLO_VW_LOCALIZACAO L
ON L.ORF_IN_REDUZIDO = C.CHA_IN_LOCALIZACAO
INNER JOIN INF_CHAMADOS_CATEGORIA CA
ON CA.CAT_IN_CODIGO = C.CHA_IN_CATEGORIA
WHERE (1 = 1
AND C.CHA_ST_STATUS = 'Fechado'
AND C.USU_IN_CODIGO = :COD_USUARIO)
OR (EXISTS (SELECT 1
FROM INF_CHAMADOS_OBSERVADOR O
WHERE O.CHA_IN_CODIGO = C.CHA_IN_CODIGO
AND O.USU_IN_CODIGO = :COD_USUARIO
AND C.CHA_ST_STATUS = 'Fechado')
)
在 plsql 中 0,097 秒
我尝试删除分页并将 null 放入最大可返回行数中。
在调试器中获取 Apex 生成的代码,执行时间为 16 秒。
select i.*
from (select "LINK","Cod","Assunto","Dt Abertura","Status","Tipo","Solicitante","Categoria","Localização"
from(select /*+ qb_name(apex$inner) */d."LINK",d."Cod",d."Assunto",d."Dt Abertura",d."Status",d."Tipo",d."Solicitante",d."Categoria",d."Localização" from(SELECT '' Link,
C.CHA_IN_CODIGO "Cod",
C.CHA_ST_ASSUNTO "Assunto",
C.CHA_DT_ABERTURA "Dt Abertura",
C.CHA_ST_STATUS "Status",
C.CHA_ST_TIPO "Tipo",
U.USU_ST_NOME "Solicitante",
CA.CAT_ST_DESCRICAO "Categoria",
L.ORF_ST_DESCRICAO "Localização"
--C.CHA_ST_DESCRICAO "Descrição" -- Causa lentidão
FROM INF_CHAMADOS C
INNER JOIN GLO_USUARIO U
ON U.USU_IN_CODIGO = C.USU_IN_CODIGO
INNER JOIN GLO_VW_LOCALIZACAO L
ON L.ORF_IN_REDUZIDO = C.CHA_IN_LOCALIZACAO
INNER JOIN INF_CHAMADOS_CATEGORIA CA
ON CA.CAT_IN_CODIGO = C.CHA_IN_CATEGORIA
WHERE (1 = 1
AND C.CHA_ST_STATUS = 'Fechado'
AND C.USU_IN_CODIGO = v('COD_USUARIO'))
OR (EXISTS (SELECT 1
FROM INF_CHAMADOS_OBSERVADOR O
WHERE O.CHA_IN_CODIGO = C.CHA_IN_CODIGO
AND O.USU_IN_CODIGO = v('COD_USUARIO')
AND C.CHA_ST_STATUS = 'Fechado')
)
)d
)i
)i where 1=1
您提到的那篇文章已经有 8 年历史了……它可以追溯到 Apex 5。从那时起,很多事情都发生了变化 - 在 Apex 18 中(5 年前;))。我建议浏览this博客并检查这是否对您有任何帮助。
总结: 从 APEX 18.2 开始,开发人员可以控制分页的执行方式:APEX 提供了两个“伪提示”:APEX$USE_ROWNUM_PAGINATION 和 APEX$USE_NO_PAGINATION。这些伪提示只能被 APEX 识别,并且必须放置在页面设计器中的优化器提示区域属性中。