0
我有一個查詢將被放入一個過程中,它將創建一個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;
那麼,如果我將兩個函數的計算移動到內部select中,查詢大約需要一分鐘。所以這就是爲什麼我認爲它是where子句中的兩個函數。感謝您的幫助 – Dan 2012-04-06 19:08:52
函數「xf_ar_charges」和「xf_ar_pymts」是確定性的嗎?這可能是因爲數據庫反覆做同樣的工作。 – 2012-04-09 13:51:58