我有一个将被放入过程的查询,它将创建一个id的报告。我的查询的WHERE
子句(不是内部视图中的子句)是长时间运行的原因。此查询大约需要twelve minutes
,我想知道您是否有任何缩短运行时间的提示。或者即使有一种方法不显示记录/行,如果过程的pl / sql代码中的balance = 0
,而不是查询。
SELECT x.arp_person_id AS student_id,
xf_ar_charges(x.arp_person_id, '2008FL') as charges,
xf_ar_pymts(x.arp_person_id,'2008FL') as payment,
(xf_ar_charges(x.arp_person_id, '2008FL')
- (xf_ar_pymts(x.arp_person_id,'2008FL')) AS balance
FROM (select distinct arp_person_id
from ar_payments
WHERE arp_fa_transmittal IS NOT NULL
AND ('N' = 'N' OR arp_date BETWEEN TO_DATE('11/01/2008','MM/DD/YYYY')
AND TO_DATE('12/31/2008','MM/DD/YYYY'))
AND ('Y' = 'N' OR arp_term IN ('2008FL', 'N')) ) x
WHERE (xf_ar_charges(x.arp_person_id, '2008FL')
- (xf_ar_pymts(x.arp_person_id,'2008FL')) != 0;
答案 0 :(得分:1)
假设你是正确的,并且大部分时间花在执行两个函数xf_ar_charges
和xf_ar_pymts
上(请注意,这是暗示它是外部{的含义的逻辑含义创建性能问题的{1}}子句)提高性能的两种最可能的方法是优化这些过程背后的代码,或者将逻辑移出这些过程并将其嵌入SQL语句本身。在不了解您的数据和代码的情况下,很难说明哪些更有可能提高性能或如何优化功能(当然,也不是任何人都可以确认它真的是导致性能问题的外部WHERE
子句)。