2

以下のクエリは、"FROM" 句に 1 つの口座番号 (a.account_nbr) と 1 つのオブジェクト コード (a.fin_object_cd) しかない場合にすばやく実行されますが、FROM 句に口座番号の範囲が含まれるようにクエリを変更すると、さまざまなオブジェクト コードがあるため、結果を返すのに非常に長い時間がかかります。実行するのに約 1 分から 20 分以上かかります。

クエリは必要な結果を返しますが、より迅速に実行する必要があります。

私に何ができる?一部の列にインデックスを追加することが役立つかどうか、またはクエリを作成するためのより良い方法があるかどうかはわかりません。

テーブルについて、または私が達成しようとしていることについてさらに情報が必要な場合は、お知らせください。

select 
a.account_nbr as "Account Number", 
a.account_nm as "Account Name", 
a.fin_object_cd as "Object Code", 
a.fin_obj_cd_nm as "Object Code Name", 

(select COALESCE(sum(fin_beg_bal_ln_amt),0) from kfsprd.gl_balance_t where account_nbr = a.account_nbr and fin_object_cd = a.fin_object_cd and univ_fiscal_yr = "2015" and fin_balance_typ_cd != "CB") as "Beginning Balance",

(select COALESCE(sum(trn_ldgr_entr_amt),0) FROM kfsprd.kf_f_transaction_dtl where univ_fiscal_yr = "2015" and account_nbr = a.account_nbr and fin_object_cd = a.fin_object_cd and trn_debit_crdt_cd = "D") as "Debits",
(select COALESCE(sum(trn_ldgr_entr_amt),0) FROM kfsprd.kf_f_transaction_dtl where univ_fiscal_yr = "2015" and account_nbr = a.account_nbr and fin_object_cd = a.fin_object_cd and trn_debit_crdt_cd = "C" and trn_ldgr_entr_amt is not null) as "Credits",

(
(select COALESCE(sum(fin_beg_bal_ln_amt),0) from kfsprd.gl_balance_t where account_nbr = a.account_nbr and fin_object_cd = a.fin_object_cd and univ_fiscal_yr = "2015" and fin_balance_typ_cd != "CB") +
(select COALESCE(sum(trn_ldgr_entr_amt),0) FROM kfsprd.kf_f_transaction_dtl where univ_fiscal_yr = "2015" and account_nbr = a.account_nbr and fin_object_cd = a.fin_object_cd and trn_debit_crdt_cd = "D") -
(select COALESCE(sum(trn_ldgr_entr_amt),0) FROM kfsprd.kf_f_transaction_dtl where univ_fiscal_yr = "2015" and account_nbr = a.account_nbr and fin_object_cd = a.fin_object_cd and trn_debit_crdt_cd = "C") 
) as "Ending Balance"

from kfsprd.kf_f_transaction_dtl a where univ_fiscal_yr = "2015" and (univ_fiscal_prd_cd between "01" and "13" or 
univ_fiscal_prd_cd = "BB") and a.account_nbr between "1014000" and "1014005" and a.fin_object_cd between "0000" and "9999" and a.fin_balance_typ_cd != "CB"
group by account_nbr, fin_object_cd
order by account_nbr, fin_object_cd;
4

1 に答える 1

4

fin_coa_cd を where 句に追加できますか? 元のテーブル (gl_entry_t) と同じ主キーを持つ場合、そのテーブルの最初の 3 つの列は univ_fiscal_yr、fin_coa_cd、account_nbr になります。使用するチャート コードがある場合は、Oracle がメイン クエリでそのインデックスを使用するのに役立つ場合があります。

于 2015-05-03T15:17:48.513 に答える