Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.server -> Tuning SQL query with views

Tuning SQL query with views

From: <ordabber_at_my-deja.com>
Date: Mon, 18 Dec 2000 18:16:59 GMT
Message-ID: <91lkak$24d$1@nnrp1.deja.com>

Hi there,

I have a bad performance problem. My query seems easy, but the only accessed "table" is in fact a VIEW, and I can't find anywhere tips to tune these kind of statements.

I'm running ORACLE 8.0.5 on Windows NT.
The database is RULE-BASED !!

To make it visual, I added my case study, but every help is welcome, also when more general!

For my case study I post here :
- the tkprof-output of the Oracle trace

When I look at the existing indexes I understand that the used indexes (PSAPAYMENT_TBL), can't speed up the statement, because they don't have the correct and necessary columns. But when I try to create an index with the correct columns, Oracle doesn't want to take these indexes!


select AP.BANK_SETID, AP.BANK_CD, AP.BANK_ACCT_KEY, AP.PYMNT_ID,   BUSINESS_UNIT_GL, ACCOUNTING_DT, AP.DOC_TYPE, AP.DOC_SEQ_NBR FROM
 PS_PAYMENT_TBL_VW5 AP

WHERE DOC_SEQ_DATE IS NULL AND DOC_SEQ_STATUS = 'N'
  AND PAY_CYCLE = 'BACOB1' and PAY_CYCLE_SEQ_NUM = 516
  and DOC_TYPE <> ' '

  ORDER BY AP.BUSINESS_UNIT_GL, AP.DOC_TYPE, AP.ACCOUNTING_DT
call     count       cpu    elapsed       disk      query
current        rows

------- ------ -------- ---------- ---------- ---------- ---------- --
Parse        3      0.15       0.22          0          0
0           0
Execute    179      0.04       0.04          0          0
0           0
Fetch      179   2997.68    6255.64    3048958   54689691
895        1735

------- ------ -------- ---------- ---------- ---------- ---------- --
total      361   2997.87    6255.90    3048958   54689691
895        1735

Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 21 (SYSADM)

Rows Execution Plan

-------  ---------------------------------------------------
      0  SELECT STATEMENT   GOAL: CHOOSE
    178 SORT (ORDER BY)
    178 NESTED LOOPS
  42607     NESTED LOOPS
  42607      TABLE ACCESS (FULL) OF 'PS_BANK_ACCT_CPTY'
  42607      INDEX (UNIQUE SCAN) OF 'PS_BANK_ACCT_DEFN' (UNIQUE)
 132864     TABLE ACCESS (BY INDEX ROWID) OF 'PS_PAYMENT_TBL'
 175471      INDEX (RANGE SCAN) OF 'PSAPAYMENT_TBL' (NON-UNIQUE)

************************************************************************



-------------------------------------------------
PS_PAYMENT_TBL_VW5

select
a.BANK_SETID

,a.BANK_CD
,a.BANK_ACCT_KEY
,a.PYMNT_ID
,a.PYMNT_ID_REF
,a.BANK_ACCOUNT_NUM
,a.BRANCH_ID
,a.CHECK_DIGIT
,a.REMIT_SETID
,a.REMIT_VENDOR
,a.vndr_loc
,a.EMPLID
,a.NAME1
,a.NAME2,

%subrec(ADDRess_SBR,a)
,a.PYMNT_DT
,a.CREATION_DT
,a.OPRID
,a.PYMNT_AMT
,a.CURRENCY_PYMNT
,a.PYMNT_METHOD
,a.PYMNT_HANDLING_CD
,a.PYMNT_STATUS
,a.PYMNT_RECONCILE_DT
,a.CANCEL_ACTION
,a.CANCEL_DT
,a.ACCOUNTING_DT
,a.POST_STATUS_AP
,a.PROCESS_INSTANCE
,a.PAY_CYCLE
,a.PAY_CYCLE_SEQ_NUM
,a.RECON_TYPE
,a.RECON_CYCLE_NBR
,a.RECONCILE_OPRID
,a.BNK_ID_NBR
,a.RECON_STATUS
,a.DFI_ID_NUM
,a.DFI_ID_QUAL
,a.EFT_PYMNT_FMT_CD
,a.STTLMNT_DT_EST
,a.STTLMNT_DT_ACTUAL
,a.EFT_TRANS_HANDLING
,a.REMIT_BANK_ACCOUNT
,a.REMIT_BRANCH_ID
,a.REMIT_CHECK_DIGIT
,a.REP_RTNG_NUM
,a.FORM_NBR_CONFIRMED
,a.IN_PROCESS_FLG
,a.POSITIVE_PAY_DT
,a.POSITIVE_PAY_STAT
,a.MICR_LINE
,a.CASH_CLEARED_FLG
,a.CASH_CLEARED_DT
,a.REPLACED_DT
,a.PYMNT_TYPE
,a.doc_type
,a.doc_seq_nbr
,a.doc_seq_date
,a.doc_seq_status
,a.preferred_language
,b.business_unit_gl
from ps_payment_tbl a,
        ps_bank_acct_tbl b

where a.bank_setid = b.setid and
 a.bank_cd = b.bank_cd and
 a.bank_acct_key = b.bank_acct_key

ps_bank_acct_tbl

SELECT

A.SETID,
B.COUNTERPARTY,
A.BANK_ACCT_KEY,
A.BANK_ACCOUNT_NUM,
A.DESCR,
A.DESCRSHORT,
A.PYMNT_HANDLING_CD,
A.PYMNT_OVRD_AMT,
A.RECON_TYPE_FLG,
A.RECON_HEADER,
A.CURRENCY_CD,
A.CUR_RT_TYPE,
A.RATE_INDEX,
A.SETTLEMENT_ID,
B.BUSINESS_UNIT_GL,
A.LAST_PYMNT_ID_USED,
A.PYMNT_ID_REF_LEN,
A.FRACT_RTG_NUM,
A.DFI_ID_NUM,
A.DFI_ID_QUAL,
A.NPL_BNK_CHRT_VALUE,
A.IU_PYBL_NPL_ACCT,
A.IU_RCVBL_NPL_ACCT,
A.CSH_PL_CLRG_ACCT,
A.CSH_PL_ACCT,
A.PL_BNK_ACCT_FLG,
A.LOCATION,
A.AR,
A.AP,
A.TR,
A.BI,
A.PP_SW,
A.ENABLE_WF_SW,
A.DEPOSIT_TYPE,
A.FORECAST,
A.TARGET_BALANCE,
A.PRE_RECONCILE,
A.CASH_CNTL_USE_FLG,
A.DRAFT_CNTL_USE_FLG,
A.BRANCH_ID,
A.CHECK_DIGIT,
A.INT_BASIS,
A.MARGIN_PTS,
A.CREATION_DT,
A.OPRID_ENTERED_BY,
A.OPRID_LAST_UPDT,
A.DEPOSIT_BU,
A.CHRG_BANK_CD,
A.CHRG_BANK_ACCT_KEY,
A.RCN_ACCTG_SW,
A.RCN_TLR_DT_FROM,
A.RCN_TLR_DT_TO,
A.DEFAULT_ACCT_SW,
A.BANK_ACCT_QUAL,
A.PREFERRED_LANGUAGE,
A.PAYER_ID_NUM,
A.BANK_ACCT_TYPE,
A.CREDIT_RATE,
A.DEBIT_RATE
FROM PS_BANK_ACCT_DEFN A,
           PS_BANK_ACCT_CPTY B

WHERE A.SETID = B.SETID
AND A.BANK_CD = B.BANK_CD
AND A.BANK_CD_CPTY = B.BANK_CD_CPTY
AND A.BANK_ACCT_KEY = B.BANK_ACCT_KEY


Existing indexes:

SQLWKS> select table_name, index_name, COLUMN_POSITION, COLUMN_NAME

     2> from dba_ind_columns where table_name in ('PS_BANK_ACCT_CPTY', 'PS_PAYMENT_TBL', 'PS_BANK_ACCT_DEFN')

     3> order by table_name, index_name, COLUMN_POSITION;
TABLE_NAME                     INDEX_NAME
COLUMN_POS
COLUMN_NAME PS_BANK_ACCT_CPTY PSABANK_ACCT_CPTY 2
BANK_CD_CUST PS_BANK_ACCT_CPTY PSABANK_ACCT_CPTY 3
COUNTERPARTY PS_BANK_ACCT_CPTY PSABANK_ACCT_CPTY 4
BANK_ACCT_KEY PS_BANK_ACCT_CPTY PSBBANK_ACCT_CPTY 1
SETID PS_BANK_ACCT_CPTY PSBBANK_ACCT_CPTY 2
BANK_CD PS_BANK_ACCT_CPTY PSBBANK_ACCT_CPTY 3
BANK_ACCT_KEY PS_BANK_ACCT_CPTY PSBBANK_ACCT_CPTY 4
COUNTERPARTY PS_BANK_ACCT_CPTY PSBBANK_ACCT_CPTY 5
BUSINESS_UNIT_GL PS_BANK_ACCT_CPTY PS_BANK_ACCT_CPTY 1
SETID PS_BANK_ACCT_CPTY PS_BANK_ACCT_CPTY 2
BANK_CD PS_BANK_ACCT_CPTY PS_BANK_ACCT_CPTY 3
BANK_CD_CPTY PS_BANK_ACCT_CPTY PS_BANK_ACCT_CPTY 4
BANK_ACCT_KEY PS_BANK_ACCT_CPTY PS_BANK_ACCT_CPTY 5
COUNTERPARTY PS_BANK_ACCT_DEFN PS#BANK_ACCT_DEFN 1
SETID PS_BANK_ACCT_DEFN PS#BANK_ACCT_DEFN 2
BANK_CD PS_BANK_ACCT_DEFN PS#BANK_ACCT_DEFN 3
BANK_CD_CPTY PS_BANK_ACCT_DEFN PS#BANK_ACCT_DEFN 4
BANK_ACCT_KEY PS_BANK_ACCT_DEFN PS#BANK_ACCT_DEFN 5
BANK_ACCOUNT_NUM PS_BANK_ACCT_DEFN PS#BANK_ACCT_DEFN 6
DESCR PS_BANK_ACCT_DEFN PSZBANK_ACCT_DEFN 1
SETID PS_BANK_ACCT_DEFN PSZBANK_ACCT_DEFN 2
BANK_CD_CPTY PS_BANK_ACCT_DEFN PSZBANK_ACCT_DEFN 3
BANK_ACCT_KEY PS_BANK_ACCT_DEFN PS_BANK_ACCT_DEFN 1
SETID PS_BANK_ACCT_DEFN PS_BANK_ACCT_DEFN 2
BANK_CD PS_BANK_ACCT_DEFN PS_BANK_ACCT_DEFN 3
BANK_CD_CPTY PS_BANK_ACCT_DEFN PS_BANK_ACCT_DEFN 4
BANK_ACCT_KEY
PS_PAYMENT_TBL                 PS#PAYMENT_TBL
1
BANK_SETID
PS_PAYMENT_TBL                 PS#PAYMENT_TBL
2
BANK_CD
PS_PAYMENT_TBL                 PS#PAYMENT_TBL
3
BANK_ACCT_KEY
PS_PAYMENT_TBL                 PS#PAYMENT_TBL
4
PYMNT_ID
PS_PAYMENT_TBL                 PS#PAYMENT_TBL
5
PYMNT_ID_REF
PS_PAYMENT_TBL                 PS#PAYMENT_TBL
6
BANK_ACCOUNT_NUM
PS_PAYMENT_TBL                 PS0PAYMENT_TBL
1
PYMNT_ID_REF
PS_PAYMENT_TBL                 PS0PAYMENT_TBL
2
BANK_SETID
PS_PAYMENT_TBL                 PS0PAYMENT_TBL
3
BANK_CD
PS_PAYMENT_TBL                 PS0PAYMENT_TBL
4
BANK_ACCT_KEY
PS_PAYMENT_TBL                 PS0PAYMENT_TBL
5
PYMNT_ID
PS_PAYMENT_TBL                 PS0PAYMENT_TBL
6
BANK_ACCOUNT_NUM
PS_PAYMENT_TBL                 PSAPAYMENT_TBL
1
BANK_SETID
PS_PAYMENT_TBL                 PSAPAYMENT_TBL
2
BANK_CD
PS_PAYMENT_TBL                 PSAPAYMENT_TBL
3
BANK_ACCT_KEY
PS_PAYMENT_TBL                 PSAPAYMENT_TBL
4
PYMNT_ID_REF
PS_PAYMENT_TBL                 PSBPAYMENT_TBL
1
PYMNT_ID_REF
PS_PAYMENT_TBL                 PSBPAYMENT_TBL
2
PYMNT_STATUS
PS_PAYMENT_TBL                 PSBPAYMENT_TBL
3
RECON_TYPE
PS_PAYMENT_TBL                 PSCPAYMENT_TBL
1
BANK_CD
PS_PAYMENT_TBL                 PSCPAYMENT_TBL
2
BANK_ACCT_KEY
PS_PAYMENT_TBL                 PSCPAYMENT_TBL
3
PYMNT_ID
PS_PAYMENT_TBL                 PSDPAYMENT_TBL
1
BNK_ID_NBR
PS_PAYMENT_TBL                 PSDPAYMENT_TBL
2
BANK_ACCOUNT_NUM
PS_PAYMENT_TBL                 PSDPAYMENT_TBL
3
PYMNT_ID_REF
PS_PAYMENT_TBL                 PSDPAYMENT_TBL
4
PYMNT_METHOD
PS_PAYMENT_TBL                 PSFPAYMENT_TBL
1
PYMNT_ID
PS_PAYMENT_TBL                 PSFPAYMENT_TBL
2
BANK_ACCT_KEY
PS_PAYMENT_TBL                 PSFPAYMENT_TBL
3
BANK_CD
PS_PAYMENT_TBL                 PSFPAYMENT_TBL
4
BANK_SETID
PS_PAYMENT_TBL                 PS_PAYMENT_TBL
1
BANK_SETID
PS_PAYMENT_TBL                 PS_PAYMENT_TBL
2
BANK_CD
PS_PAYMENT_TBL                 PS_PAYMENT_TBL
3
BANK_ACCT_KEY
PS_PAYMENT_TBL                 PS_PAYMENT_TBL
4
PYMNT_ID 61 rows selected.
SQLWKS>
SQLWKS> spool off

Sent via Deja.com
http://www.deja.com/ Received on Mon Dec 18 2000 - 12:16:59 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US