0

プロシージャに入れるクエリがあり、ID のレポートを作成します。私のクエリのWHERE節 (内部ビューのものではない) が、長時間の実行時間の原因です。このクエリには約 がかかりますtwelve minutes。実行時間を短縮するためのヒントがあれば教えてください。balance = 0または、クエリではなく、プロシージャの pl/sql コードにある場合、レコード/行を表示しない方法がある場合でも。

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;
4

1 に答える 1

1

あなたが正しく、時間の大部分が2つの関数の実行に費やされていると仮定するxf_ar_chargesと(これは、パフォーマンスの問題を引き起こしているのは外側の句であるxf_ar_pymtsという含意の論理的な含意であることに注意してください)WHEREパフォーマンスを改善するには、これらのプロシージャの背後にあるコードを最適化するか、それらのプロシージャからロジックを移動して SQL ステートメント自体に埋め込みます。データとコードについて詳しく知らなければ、これらのどれがパフォーマンスを向上させる可能性が高いか、関数を最適化する方法を提案することは困難です (また、もちろん、それが本当にWHEREパフォーマンスの問題を引き起こしている 外部句)。

于 2012-04-06T19:06:14.023 に答える