我正在使用php和oracle从oracle数据库中获取数据,并通过与oracle数据库连接来使用php代码在php表中显示。问题是,我在长时间循环后获取数据以运行其他查询时首先我运行了一个查询,该查询向我提供了截至2019年11月23日(我在查询中分配的日期)的总卡数,并且此查询还会给出在23/11/2019至25/11/2019之间取消的所有卡,这在php中使用oci_excecute()的查询之下
现在我想写另一个查询,该查询可以提供总重发卡,但条件是员工之前已取消卡并在23/11/2019到25/11/2019之间重新发卡。为此,我做了以下代码
现在的问题是,有一个for循环会执行查询直到数组大小,这要花很多时间,而且长时间后我会得到结果。您能告诉我如何快速取得结果吗?谢谢
查询性能下降的原因有很多。我们不能只看一个查询,抚摸下巴,然后说“啊哈!就是这一行”。请阅读有关询问Oracle调优问题的出色文章。
话虽如此,在这种情况下,您应该重新考虑应用程序设计。查询循环中的查询循环始终是一个危险信号。联接所有必需的表以在客户端中进行渲染的单个查询可能会更有效:
select eofficeuat.cardprintlog_cpa.empid
from eofficeuat.cardprintlog_cpa
where eofficeuat.cardprintlog_cpa.cardstatus='READY'
and eofficeuat.cardprintlog_cpa.dateofissue BETWEEN TO_DATE('23/11/2019', 'dd/mm/yyyy') AND TO_DATE('25/11/2019', 'dd/mm/yyyy')
and eofficeuat.cardprintlog_cpa.empid in (
select eofficeuat.cardprintlog_cpa.empid
from eofficeuat.cardprintlog_cpa
where eofficeuat.cardprintlog_cpa.cardstatus='DISCARDED'
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句