Help Tune a query

Hi,
Can you please help me tune a query?
I have a dimension table PRODUCT which is having product data with millions of rows and another table (fact table) with more than millions of rows and it is called PRODUCT TRANSACTION.
The PRODUCT TRANSACTION table has multiple rows for a given product with multiple issue dates. EX.
PRODUCT ISSUE DATE
A 10/28/2008
B 11/02/2008
C 05/28/2008
D 06/27/2008
E 07/28/2008
I am doing JOIN between PRODUCT (dimension table) and fact (PRODUCT TRANSACTION TABLE) and just want a minimum of ISSUE DATE (means only one record from fact table for each product in dimension table).
I have written query as
SELECT PRODUCT_ID FROM
PRODUCT_TRANSACTION AS PT
INNER JOIN PRODUCT P ON
P.PRODUCT_ID IN (SELECT PT.PRODUCT_ID FROM
SELECT PT1.PRODUCT_ID, MIN (PT1.ISSUE_DATE) AS MINC
FROM PRODUCT_TRANSACTION PT1
GROUP BY PT1.PRODUCT_ID) B)
This query takes forever. Is there a better way to accomplish this?
Please suggest.

Try this:
SELECT
PRODUCT_ID,
min(issue_date)  keep(dense_rank first order by issue_date)
FROM
PRODUCT_TRANSACTION
GROUP BY PRODUCT_IDRegards,
Sayan M.

Similar Messages

  • Pls. help tune this query

    This is the SQL i would like to tune for performace...
    The table structure is given below.
    The table has about 5 million rows.
    On the first day, load_flag has all the rows as 'I'.
    Then from the second day onwards only around 10% of records will be between Load_Start_Time and Load_End_Time. Among these around 40% will have Record_key like 'TP%'. And among those most of the records (95%)will have load_flag as 'U' and a very few (5%) as 'I'. At present there are unique and primary key indexes on record_key. Please advice me whether it's better to go for an index on any of these columns and what type would be better. I thought it would help to have a bit map index on load_flag and a function base index on SUBSTR (RECORD_KEY).
    Also pls. let me know if the order of predicates is right.
    Thanks in advance.
    M_STG_TPDB_TPD_TL_W_PH_LOI_CNTBLTY_STATUS_CE     SQ_STG_TPD_STG_TL_CS_EXTRACTED_RECS_MOD     "SELECT TPD_STG_TL_CS_EXTRACTED_RECS.RECORD_KEY, TPD_STG_TL_CS_EXTRACTED_RECS.DATA_SOURCE, TPD_STG_TL_CS_EXTRACTED_RECS.CONTACTABLE_INDICATOR, TPD_STG_TL_CS_EXTRACTED_RECS.LEGAL_OWNERSHIP_ISSUE_IND, TPD_STG_TL_CS_EXTRACTED_RECS.ADMIN_CONTROL_INDICATOR, TPD_STG_TL_CS_EXTRACTED_RECS.BANKRUPTCY_INDICATOR, TPD_STG_TL_CS_EXTRACTED_RECS.ASSIGNED_INDICATOR, TPD_STG_TL_CS_EXTRACTED_RECS.IN_TRUST_INDICATOR, TPD_STG_TL_CS_EXTRACTED_RECS.DIVORCE_CASE_INDICATOR, TPD_STG_TL_CS_EXTRACTED_RECS.POA_COP_INDICATOR, TPD_STG_TL_CS_EXTRACTED_RECS.SOURCE_EXTRACT_DATE_TIME
    FROM
    TPD_STG_TL_CS_EXTRACTED_RECS
    WHERE
    LOAD_FLAG IN ('I','U')
    AND SUBSTR (RECORD_KEY, 1,2)='TP'
    AND STG_UPDATE_DATE_TIME>'$$Load_Start_Time'
    AND STG_UPDATE_DATE_TIME<='$$Load_End_Time'"
    Table structure
    CREATE TABLE TPD_STG_TL_CS_EXTRACTED_RECS
    RECORD_KEY VARCHAR2(35 BYTE),
    SCHEME_NAME VARCHAR2(50 BYTE),
    ORGANISATION_NAME VARCHAR2(50 BYTE),
    SUPERIOR_TITLE_1 VARCHAR2(50 BYTE),
    TITLE_1 VARCHAR2(50 BYTE),
    FIRST_NAME_1 VARCHAR2(50 BYTE),
    MIDDLE_NAME_1 VARCHAR2(50 BYTE),
    SURNAME_1 VARCHAR2(50 BYTE),
    ADDRESS_LINE_1_1 VARCHAR2(50 BYTE),
    ADDRESS_LINE_2_1 VARCHAR2(50 BYTE),
    ADDRESS_LINE_3_1 VARCHAR2(50 BYTE),
    ADDRESS_LINE_4_1 VARCHAR2(50 BYTE),
    ADDRESS_LINE_5_1 VARCHAR2(50 BYTE),
    ADDRESS_LINE_6_1 VARCHAR2(50 BYTE),
    POST_CODE_1 VARCHAR2(12 BYTE),
    COUNTRY_1 VARCHAR2(50 BYTE),
    OVERSEAS_INDICATOR_1 CHAR(1 BYTE),
    DOB_1 NUMBER(8),
    GENDER_1 CHAR(1 BYTE),
    NINO_1 VARCHAR2(9 BYTE),
    DEATH_INDICATOR_1 CHAR(1 BYTE),
    PRODUCT_HOLDING_ROLE_TYPE_1 VARCHAR2(21 BYTE),
    GONE_AWAY_INDICATOR_1 CHAR(1 BYTE),
    THAMES_LEGAL_OWNERSHIP_IND_1 CHAR(1 BYTE),
    SOURCE_SYSTEM_PARTY_INDV_ID_1 VARCHAR2(15 BYTE),
    SUPERIOR_TITLE_2 VARCHAR2(50 BYTE),
    TITLE_2 VARCHAR2(50 BYTE),
    FIRST_NAME_2 VARCHAR2(50 BYTE),
    MIDDLE_NAME_2 VARCHAR2(50 BYTE),
    SURNAME_2 VARCHAR2(50 BYTE),
    ADDRESS_LINE_1_2 VARCHAR2(50 BYTE),
    ADDRESS_LINE_2_2 VARCHAR2(50 BYTE),
    ADDRESS_LINE_3_2 VARCHAR2(50 BYTE),
    ADDRESS_LINE_4_2 VARCHAR2(50 BYTE),
    ADDRESS_LINE_5_2 VARCHAR2(50 BYTE),
    ADDRESS_LINE_6_2 VARCHAR2(50 BYTE),
    POST_CODE_2 VARCHAR2(12 BYTE),
    COUNTRY_2 VARCHAR2(50 BYTE),
    OVERSEAS_INDICATOR_2 CHAR(1 BYTE),
    DOB_2 NUMBER(8),
    GENDER_2 CHAR(1 BYTE),
    NINO_2 VARCHAR2(9 BYTE),
    DEATH_INDICATOR_2 CHAR(1 BYTE),
    PRODUCT_HOLDING_ROLE_TYPE_2 VARCHAR2(21 BYTE),
    GONE_AWAY_INDICATOR_2 CHAR(1 BYTE),
    THAMES_LEGAL_OWNERSHIP_IND_2 CHAR(1 BYTE),
    SOURCE_SYSTEM_PARTY_INDV_ID_2 VARCHAR2(15 BYTE),
    JOINT_OWNER_INDICATOR CHAR(1 BYTE),
    JOINT_LIFE_TYPE NUMBER(1),
    SAME_ADDRESS_INDICATOR CHAR(1 BYTE),
    TITLE_LA1 VARCHAR2(50 BYTE),
    FIRST_NAME_LA1 VARCHAR2(50 BYTE),
    SURNAME_LA1 VARCHAR2(50 BYTE),
    DOB_LA1 NUMBER(8),
    TITLE_LA2 VARCHAR2(50 BYTE),
    FIRST_NAME_LA2 VARCHAR2(50 BYTE),
    SURNAME_LA2 VARCHAR2(50 BYTE),
    DOB_LA2 NUMBER(8),
    PRODUCT_HOLDING_REF_NUMBER VARCHAR2(28 BYTE),
    PARENT_PRODUCT_HOLDING_REF_NUM VARCHAR2(9 BYTE),
    OCDB_REFERENCE_NUMBER VARCHAR2(17 BYTE),
    BUSINESS_GROUP CHAR(3 BYTE),
    SCHEME_NUMBER VARCHAR2(8 BYTE),
    TRUSTEE_SEQUENCE_NUMBER NUMBER(10),
    MEMBER_NUMBER VARCHAR2(10 BYTE),
    PRSN_ID NUMBER(10),
    OLD_SCHEME_NUMBER VARCHAR2(8 BYTE),
    PUBLIC_SECTOR_INDICATOR CHAR(1 BYTE),
    ELIGIBLE_INDICATOR CHAR(1 BYTE),
    SCHEME_STATUS NUMBER(1),
    SCHEME_TYPE CHAR(2 BYTE),
    Q_DATE_WITH_PROFIT_STATUS NUMBER(1),
    A_DATE_WITH_PROFIT_STATUS NUMBER(1),
    LATEST_WITH_PROFIT_STATUS NUMBER(1),
    NPSW_INDICATOR CHAR(1 BYTE),
    PRODUCT_HOLDING_STATUS CHAR(1 BYTE),
    MATURITY_DATE_OF_CONTRACT NUMBER(8),
    DUE_END_DATE_OF_CONTRACT NUMBER(8),
    OUT_OF_FORCE_DATE NUMBER(8),
    OUT_OF_FORCE_REASON_CODE NUMBER(2),
    DATA_SOURCE VARCHAR2(3 BYTE),
    PRODUCT_TYPE VARCHAR2(30 BYTE),
    PRODUCT_DESCRIPTION VARCHAR2(50 BYTE),
    SERVICING_AGENT_NUMBER VARCHAR2(10 BYTE),
    CONTACTABLE_INDICATOR CHAR(1 BYTE),
    LEGAL_OWNERSHIP_ISSUE_IND CHAR(1 BYTE),
    ADMIN_CONTROL_INDICATOR CHAR(1 BYTE),
    BANKRUPTCY_INDICATOR CHAR(1 BYTE),
    ASSIGNED_INDICATOR CHAR(1 BYTE),
    IN_TRUST_INDICATOR CHAR(1 BYTE),
    DIVORCE_CASE_INDICATOR CHAR(1 BYTE),
    POA_COP_INDICATOR CHAR(1 BYTE),
    DONOR_POLICY_INDICATOR CHAR(1 BYTE),
    TAX_JURISDICTION NUMBER(2),
    INELIGIBLE_DATE NUMBER(8),
    INELIGIBILITY_REASON NUMBER(2),
    A_DATE_CASH_OR_BONUS_TYPE CHAR(1 BYTE),
    VALUATION_APPLICABLE_DATE NUMBER(8),
    A_DATE_PIP_AMOUNT NUMBER(12),
    A_DATE_NPSW_AMOUNT NUMBER(10),
    A_DATE_MINIMUM_APPLIED_AMOUNT NUMBER(10),
    A_DATE_MINIMUM_CALC_AMOUNT NUMBER(10),
    A_DATE_POLICY_VALUE NUMBER(16),
    A_DATE_DATE_PIP_CALCULATED NUMBER(8),
    A_DATE_ALGORITHM_NUMBER NUMBER(2),
    M_DATE_VOTING_VALUE NUMBER(12),
    M_DATE_POLICY_VALUE NUMBER(16),
    E_DATE_CASH_OR_BONUS_TYPE CHAR(1 BYTE),
    E_DATE_PIP_AMOUNT NUMBER(12),
    E_DATE_NPSW_AMOUNT NUMBER(10),
    E_DATE_MINIMUM_APPLIED_AMOUNT NUMBER(10),
    E_DATE_MINIMUM_CALC_AMOUNT NUMBER(10),
    E_DATE_POLICY_VALUE NUMBER(16),
    E_DATE_DATE_PIP_CALCULATED NUMBER(8),
    E_DATE_ALGORITHM_NUMBER NUMBER(2),
    P_DATE_CASH_OR_BONUS_TYPE CHAR(1 BYTE),
    P_DATE_PIP_AMOUNT NUMBER(12),
    P_DATE_NPSW_AMOUNT NUMBER(10),
    P_DATE_MINIMUM_APPLIED_AMOUNT NUMBER(10),
    P_DATE_MINIMUM_CALC_AMOUNT NUMBER(10),
    P_DATE_POLICY_VALUE NUMBER(16),
    P_DATE_DATE_PIP_CALCULATED NUMBER(8),
    P_DATE_ALGORITHM_NUMBER NUMBER(2),
    SOURCE_EXTRACT_DATE_TIME DATE,
    SCHEME_SEQUENCE_NUMBER NUMBER(3),
    LOAD_FLAG CHAR(1 BYTE),
    STG_CREATE_DATE_TIME DATE,
    STG_UPDATE_DATE_TIME DATE
    TABLESPACE TPDBS01A_DATA
    PCTUSED 0
    PCTFREE 10
    INITRANS 1
    MAXTRANS 255
    STORAGE (
    INITIAL 128K
    NEXT 128K
    MINEXTENTS 1
    MAXEXTENTS 2147483645
    PCTINCREASE 0
    BUFFER_POOL DEFAULT
    LOGGING
    NOCOMPRESS
    NOCACHE
    NOPARALLEL
    MONITORING;
    CREATE UNIQUE INDEX PK_STG_TL_CS_EXTRACTED_RECS ON TPD_STG_TL_CS_EXTRACTED_RECS
    (RECORD_KEY)
    LOGGING
    TABLESPACE TPDBS01A_DATA
    PCTFREE 10
    INITRANS 2
    MAXTRANS 255
    STORAGE (
    INITIAL 128K
    NEXT 128K
    MINEXTENTS 1
    MAXEXTENTS 2147483645
    PCTINCREASE 0
    BUFFER_POOL DEFAULT
    NOPARALLEL;
    ALTER TABLE TPD_STG_TL_CS_EXTRACTED_RECS ADD (
    CONSTRAINT PK_STG_TL_CS_EXTRACTED_RECS
    PRIMARY KEY
    (RECORD_KEY)
    USING INDEX
    TABLESPACE TPDBS01A_DATA
    PCTFREE 10
    INITRANS 2
    MAXTRANS 255
    STORAGE (
    INITIAL 128K
    NEXT 128K
    MINEXTENTS 1
    MAXEXTENTS 2147483645
    PCTINCREASE 0
    ));

    I would like to discuss a bit more how a composite index is used. This is not anymore the question of the OP, but I think it will deepen my understanding and maybe that of others as well.
    So we have this situation to start with.
    * A select on two different columns.
    * An index on each column would lead to an INDEX RANGE SCAN because of the where condition.
    * Instead of 2 indexes where only one would be used (not considering bitmap conversions), we add a composite index on both columns.
    * The CBO will choose and access the index.
    Question is: How is this access is done in detail?
    So 400 rows come out of the index range scan.
    This would not be possible if it only scanned one of the two predicates. I agree. The output of the index seem to be only those (400) rows that fit with the where clause on both columns.
    This is supported by the fact that an Index only access is possible when we select only information that is in the index (Oracle 9i output).
    SQL> explain plan for
      2  select record_key
      3  from mytable
      4  where stg_update_date_time >= to_date('2007-11-11','yyyy-mm-dd')
      5  and stg_update_date_time < to_date('2007-11-12','yyyy-mm-dd')
      6  and record_key like 'TP%'
      7  /
    Explained.
    SQL>  select * from table(dbms_xplan.display);
    PLAN_TABLE_OUTPUT
    | Id  | Operation            |  Name       | Rows  | Bytes | Cost  |
    |   0 | SELECT STATEMENT     |             |   160 |  2400 |     2 |
    |   1 |  INDEX RANGE SCAN    | I1          |   160 |  2400 |     2 |
    Note: cpu costing is off, PLAN_TABLE' is old version
    9 rows selected.
    SQL> Unfortunately I don't see the filter operation, probably because the plan table is old in my system.
    The index is build on columns "stg_update_date_time" and "record_key". So it must access these columns in that order.
    I think, that maybe the range scan is done on the date column and then a further access/filter operation is done to rule out any index entries (leaf nodes) that do not fit with the LIKE 'TP%' expression.
    Since I expect that is is faster to access the data in the index than in the table this should improve performance quite a bit. It is not the same access plan/speed however as with a clause like this:
    SQL> select * from table(dbms_xplan.display);
    PLAN_TABLE_OUTPUT
    | Id  | Operation                   |  Name       | Rows  | Bytes | Cost  |
    |   0 | SELECT STATEMENT            |             |     1 |   520 |     3 |
    |   1 |  TABLE ACCESS BY INDEX ROWID| MYTABLE     |     1 |   520 |     3 |
    |   2 |   INDEX RANGE SCAN          | I1          |     1 |       |     2 |
    Note: cpu costing is off, PLAN_TABLE' is old version
    10 rows selected.
    SQL> The difference can be seen in the cost estimation.
    I hope somebody does understand what I would like to point at.
    Result of this considerations:
    1) Composite index can be used
    2) The index is used as a range scan on one column and as a filter operation after this access on the second column. This is like an extra select statement inside the index structure.
    3) The resulting table access is as small as possible.
    4) A faster access plan can be achieved when the first column is accessed with direct (unique) scan on the first and a range scan on the second column.
    br Sven
    Message was edited by:
    Sven Weller

  • Please help tune this query

    Following is the sql code
    SELECT mbr_contr_med_cov_flag,
               mbr_contr_rx_cov_flag,
               src_mbr_id,
               cov_cd_eff_dt,
               MIN (
                  TO_DATE (
                     SYS_CONNECT_BY_PATH (
                        DECODE (LEVEL, 1, TO_CHAR (elig_eff_dt), ''),
                  AS beg_dt,
               MAX (elig_term_dt) term_dt
          FROM temp_elig_mem
    CONNECT BY PRIOR src_mbr_id = src_mbr_id
               AND PRIOR elig_term_dt + 1 = elig_eff_dt
      GROUP BY mbr_contr_med_cov_flag,
               mbr_contr_rx_cov_flag,
               src_mbr_id,
               cov_cd_eff_dtExplain plan:
    PLAN_TABLE_OUTPUT
    | Id  | Operation                     | Name          | Rows  | Bytes | Cost  |
    |   0 | SELECT STATEMENT              |               |   311K|    13M|   426 |
    |   1 |  HASH GROUP BY                |               |   311K|    13M|   426 |
    |   2 |   CONNECT BY WITHOUT FILTERING|               |       |       |       |
    |   3 |    TABLE ACCESS FULL          | TEMP_ELIG_MEM |   311K|    13M|   411 |
    -------------------------------------------------------------------------------Funny part is if I remove a 'PRIOR' from the code it runs faster. I mean the following code with one 'PRIOR' taken out runs faster:
    SELECT mbr_contr_med_cov_flag,
               mbr_contr_rx_cov_flag,
               src_mbr_id,
               cov_cd_eff_dt,
               MIN (
                  TO_DATE (
                     SYS_CONNECT_BY_PATH (
                        DECODE (LEVEL, 1, TO_CHAR (elig_eff_dt), ''),
                  AS beg_dt,
               MAX (elig_term_dt) term_dt
          FROM temp_elig_mem
    CONNECT BY PRIOR src_mbr_id = src_mbr_id
               AND elig_term_dt + 1 = elig_eff_dt
      GROUP BY mbr_contr_med_cov_flag,
               mbr_contr_rx_cov_flag,
               src_mbr_id,
               cov_cd_eff_dt

    user2361373 wrote:
    The problem may be due to MIN and MAX().Whole query is a mess. Just look at decode. For LEVEL= 1 it returns TO_CHAR(elig_eff_dt). For other levels it returns NULL. Therefore:
                        SYS_CONNECT_BY_PATH(
                                            DECODE(LEVEL,1,TO_CHAR(elig_eff_dt),''),
                                           )returns TO_CHAR(elig_eff_dt) of LEVEL = 1 followed by bunch of spaces. Then OP converts it back to DATE. In other words, regardless what LEVEL is it returns top level (LEVEL = 1) elig_eff_dt, which is nothing but CONNECT_BY_ROOT elig_eff_dt. So query can be simplified:
    SELECT  mbr_contr_med_cov_flag,
            mbr_contr_rx_cov_flag,
            src_mbr_id,
            cov_cd_eff_dt,
            MIN(CONNECT_BY_ROOT elig_eff_dt) AS beg_dt,
            MAX(elig_term_dt) term_dt
      FROM temp_elig_mem
      CONNECT BY PRIOR src_mbr_id = src_mbr_id
             AND PRIOR elig_term_dt + 1 = elig_eff_dt
      GROUP BY mbr_contr_med_cov_flag,
               mbr_contr_rx_cov_flag,
               src_mbr_id,
               cov_cd_eff_dt
    /Now:
      CONNECT BY PRIOR src_mbr_id = src_mbr_id
             AND elig_term_dt + 1 = elig_eff_dtIt obviously lacks PRIOR:
      CONNECT BY PRIOR src_mbr_id = src_mbr_id
             AND PRIOR elig_term_dt + 1 = elig_eff_dtNow, assuming table is relatively big, since there is no START WITH I suspect number of unnecessary rows built by hierarchy is a big part of performance issue. I'd add:
    START WITH (src_mbr_id,elig_eff_dt) IN (SELECT src_mbr_id,MIN(elig_eff_dt) FROM temp_elig_mem GROUP BY src_mbr_id)And if all rows in each hierarchy have same mbr_contr_med_cov_flag, mbr_contr_rx_cov_flag, cov_cd_eff_dt:
    MAX(elig_term_dt) term_dtis nothing but elig_term_dt from the hierarchy leaf row. Then whole query can be simplified to:
    SELECT  mbr_contr_med_cov_flag,
            mbr_contr_rx_cov_flag,
            src_mbr_id,
            cov_cd_eff_dt,
            CONNECT_BY_ROOT elig_eff_dt AS beg_dt,
            elig_term_dt term_dt
      WHERE CONNECT_BY_ISLEAF = 1
      FROM temp_elig_mem
      START WITH (src_mbr_id,elig_eff_dt) IN (SELECT src_mbr_id,MIN(elig_eff_dt) FROM temp_elig_mem GROUP BY src_mbr_id)
      CONNECT BY PRIOR src_mbr_id = src_mbr_id
             AND PRIOR elig_term_dt + 1 = elig_eff_dt
    /SY.
    Edited by: Solomon Yakobson on Jan 16, 2012 7:08 PM

  • HELP TO TUNE THIS QUERY

    Hi,
    I'm using below query in procedure.It's taking more more time can some one help to tune this query or advice to rewrite the query.
    Databse :10.1
    SELECT   'Reading Comprehension' TEST_NAME,T.TEST_END_DATE TEST_SESSION_DATE,
            C.POOL_VERSION_ID, I.CREATED_ON POOL_CREATED_DT,
            C.ITEM_ID, C.ITEM_RESPONSE_ID, S.STUDENT_ID_PK, C.RESPONSE_KEY, C.IS_CORRECT RESPONSE_IS_CORRECT,
            T.SCORE SCALE_SCORE, C.RESPONSE_DURATION, P.ITEM_KEY,
            T.TEST_SESSION_DETAIL_ID, SYSDATE CREATED_ON
           -- BULK COLLECT INTO TV_PSYCHO_DET
            FROM
            CAT_ITEM_PARAMETER P, CAT_ITEM_USER_RESPONSE C, TEST_SESSION_DETAIL T,
            TEST_SESSION S, ITEM_POOL_VERSION I, TEST_DETAIL D
            ,INSTITUTION E
            WHERE  TRUNC(T.TEST_END_DATE) BETWEEN TO_DATE('01-11-09','dd-mm-yy') AND TO_DATE('30-11-09','dd-mm-yy')
            AND D.TEST_NAME =  'Reading Comprehension'
            AND T.TEST_SESSION_STATUS_ID = 3
            AND I.POOL_AVAILABILITY='Y'
            AND P.PRETEST=0 AND C.RESTART_FLAG=0
            AND T.TEST_DETAIL_ID = D.TEST_DETAIL_ID
            AND S.TEST_SESSION_ID = T.TEST_SESSION_ID
            AND C.TEST_SESSION_DETAIL_ID = T.TEST_SESSION_DETAIL_ID
            AND S.INSTITUTION_ID=E.INSTITUTION_ID
            AND SUBSTR(E.INSTITUTION_ID_DISPLAY,8,3) <> '000'
            AND I.ITEM_ID = C.ITEM_ID
            AND P.ITEM_ID = I.ITEM_ID;expln plan
    Plan hash value: 3712814491                                                                                                      
    | Id  | Operation                                 | Name                        | Rows  | Bytes | Cost (%CPU)| Time     | Pstart|
    Pstop |                                                                                                                          
    |   0 | SELECT STATEMENT                          |                             | 50857 |  7151K| 93382   (1)| 00:18:41 |       |
          |                                                                                                                          
    |*  1 |  FILTER                                   |                             |       |       |            |          |       |
          |                                                                                                                          
    |*  2 |   HASH JOIN                               |                             | 50857 |  7151K| 93382   (1)| 00:18:41 |       |
          |                                                                                                                          
    |   3 |    PARTITION HASH ALL                     |                             |  2312 | 23120 |    25   (0)| 00:00:01 |     1 |
        5 |                                                                                                                          
    |*  4 |     TABLE ACCESS FULL                     | CAT_ITEM_PARAMETER          |  2312 | 23120 |    25   (0)| 00:00:01 |     1 |
        5 |                                                                                                                          
    |*  5 |    HASH JOIN                              |                             | 94938 |    12M| 93356   (1)| 00:18:41 |       |
          |                                                                                                                          
    |*  6 |     TABLE ACCESS FULL                     | ITEM_POOL_VERSION           |  9036 |   132K|    30   (0)| 00:00:01 |       |
          |                                                                                                                          
    |*  7 |     TABLE ACCESS BY GLOBAL INDEX ROWID    | CAT_ITEM_USER_RESPONSE      |     9 |   279 |    18   (0)| 00:00:01 | ROWID |
    ROWID |                                                                                                                          
    |   8 |      NESTED LOOPS                         |                             | 45349 |  5270K| 93325   (1)| 00:18:40 |       |
          |                                                                                                                          
    |*  9 |       HASH JOIN                           |                             |  4923 |   423K| 11377   (1)| 00:02:17 |       |
          |                                                                                                                          
    |* 10 |        INDEX FAST FULL SCAN               | INSTI_ID_NAME_COUN_DISP_IDX |  8165 |   111K|    18   (0)| 00:00:01 |       |
          |                                                                                                                          
    |* 11 |        HASH JOIN                          |                             |  4923 |   355K| 11359   (1)| 00:02:17 |       |
          |                                                                                                                          
    |* 12 |         TABLE ACCESS BY GLOBAL INDEX ROWID| TEST_SESSION_DETAIL         |  4107 |   148K|  6804   (1)| 00:01:22 | ROWID |
    ROWID |                                                                                                                          
    |  13 |          NESTED LOOPS                     |                             |  4923 |   278K|  6806   (1)| 00:01:22 |       |
          |                                                                                                                          
    |* 14 |           INDEX RANGE SCAN                | TEST_DETAIL_AK_1            |     1 |    21 |     2   (0)| 00:00:01 |       |
          |                                                                                                                          
    |* 15 |           INDEX RANGE SCAN                | TEST_SESSION_DETAIL_FK2_I   | 39737 |       |   102   (0)| 00:00:02 |       |
          |                                                                                                                          
    |  16 |         PARTITION HASH ALL                |                             |  1672K|    25M|  4546   (1)| 00:00:55 |     1 |
        5 |                                                                                                                          
    |  17 |          TABLE ACCESS FULL                | TEST_SESSION                |  1672K|    25M|  4546   (1)| 00:00:55 |     1 |
        5 |                                                                                                                          
    |* 18 |       INDEX RANGE SCAN                    | CAT_ITEM_USER_RESP_IDX1     |    18 |       |     3   (0)| 00:00:01 |       |
          |                                                                                                                          
    Predicate Information (identified by operation id):                                                                              
       1 - filter(TO_DATE('01-11-09','dd-mm-yy')<=TO_DATE('30-11-09','dd-mm-yy'))                                                    
       2 - access("P"."ITEM_ID"="I"."ITEM_ID")                                                                                       
       4 - filter("P"."PRETEST"=0)                                                                                                   
       5 - access("I"."ITEM_ID"="C"."ITEM_ID")                                                                                       
       6 - filter("I"."POOL_AVAILABILITY"='Y')                                                                                       
       7 - filter(TO_NUMBER("C"."RESTART_FLAG")=0)                                                                                   
       9 - access("S"."INSTITUTION_ID"="E"."INSTITUTION_ID")                                                                         
      10 - filter(SUBSTR("E"."INSTITUTION_ID_DISPLAY",8,3)<>'000')                                                                   
      11 - access("S"."TEST_SESSION_ID"="T"."TEST_SESSION_ID")                                                                       
      12 - filter(TRUNC(INTERNAL_FUNCTION("T"."TEST_END_DATE"))>=TO_DATE('01-11-09','dd-mm-yy') AND "T"."TEST_SESSION_STATUS_ID"=3   
                  AND TRUNC(INTERNAL_FUNCTION("T"."TEST_END_DATE"))<=TO_DATE('30-11-09','dd-mm-yy'))                                 
      14 - access("D"."TEST_NAME"='Reading Comprehension')                                                                           
      15 - access("T"."TEST_DETAIL_ID"="D"."TEST_DETAIL_ID")                                                                         
      18 - access("C"."TEST_SESSION_DETAIL_ID"="T"."TEST_SESSION_DETAIL_ID")                                                         
    43 rows selected.Edited by: user575115 on Dec 18, 2009 12:31 AM

    When you see something like ...
       7 - filter(TO_NUMBER("C"."RESTART_FLAG")=0)                                                                                    It means that Oracle had to do a conversion for you since you aren't using the proper data type in your query.
    That would mean IF there is an index on that column, it won't be useable...

  • Help needed to tune the Query:Statistics added

    Can someone DBA please help me to tune this query:
    SELECT DISTINCT K.ATTRIBUTE_VALUE AGENCY_ID,B.PROFILE_NM ,NVL(G.OFFICE_DESC,'--') OFFICE_DESC,f.OFFICE_ID,B.PROFILE_ID,'%' ROLE,'%' LAYOUT,
    CASE
    WHEN 'flagB' = '%' THEN
    NVL(J.ISS_GRP_DESC,'BILLING')
    WHEN 'flagO' = '%' THEN
    NVL(J.ISS_GRP_DESC,'ORDERING')
    WHEN 'flag' = '%' THEN
    NVL(J.ISS_GRP_DESC,'BILLING/ORDERING')
    ELSE
    NVL(J.ISS_GRP_DESC,' ')
    END ISS_GRP_DESC,
    DECODE(NVL(H.USERID,' ') ,' ','--','<a sbcuid_in=' || H.USERID || ' target=NEW >'||H.FIRSTNAME || ' ' || H.LASTNAME || '( ' || H.USERID || ' )</a>' ) USER_NAME
    FROM
    PROFILE_PORTAL B ,
    TBL_BDA_AGENCY_RESP_REP C ,
    TBL_BDA_AGENCY_OFFICE F,
    TBL_BDA_OFFICE G,
    USERS_PORTAL H,
    TBL_BDA_USR_ISS_GRP I ,
    TBL_BDA_ISS_GROUP J,
    ATTRIBUTE_VALUES_PORTAL K,
    PROFILE_TYPE_PORTAL L
    WHERE
    B.PROFILE_ID = F.AGENCY_ID (+)
    AND B.PROFILE_ID = C.AGENCY_ID (+)
    AND G.OFFICE_ID (+)= F.OFFICE_ID
    AND H.USERID (+)= C.RESP_USR_ID
    AND C.ISS_GRP_ID = I.ISS_GRP_ID (+)
    AND I.ISS_GRP_ID = J.ISS_GRP_ID(+)
    AND 'PROFILE.'||B.PROFILE_ID = K.ENTITY_ID(+)
    AND K.ATTRIBUTE_VALUE IS NOT NULL
    AND L.PROFILE_TYPE_ID = B.PROFILE_TYPE_ID
    AND L.APPLICATION_CD='BDA'
    AND NOT EXISTS (SELECT agency_id
    FROM TBL_BDA_AGENCY_RESP_REP t
    WHERE t.ISS_GRP_ID IN ('%')
    AND t.AGENCY_ID = C.AGENCY_ID)
    AND K.ATTRIBUTE_VALUE LIKE '%'
    AND UPPER(B.PROFILE_NM) LIKE UPPER('%')
    AND (to_char(NVL(B.PROFILE_ID,0)) LIKE '%' OR NVL(B.PROFILE_ID,0) IN ('a'))
    AND NVL(G.OFFICE_ID,0) IN ('%')
    AND (to_char(NVL(C.RESP_USR_ID,'0')) LIKE '%' OR NVL(C.RESP_USR_ID,'0') IN ('k'))
    ORDER BY PROFILE_NM
    The number of rows in these tables are as follows:
    PROFILE_PORTAL -- 2392
    TBL_BDA_AGENCY_RESP_REP 3508
    TBL_BDA_AGENCY_OFFICE 2151
    TBL_BDA_OFFICE 3
    USERS_PORTAL 270500
    TBL_BDA_USR_ISS_GRP 234
    TBL_BDA_ISS_GROUP 2
    ATTRIBUTE_VALUES_PORTAL 2790
    PROFILE_TYPE_PORTAL 3
    The Explain pal nhas given this o/p to me:
    SQL> select * from table(dbms_xplan.display) dual;
    PLAN_TABLE_OUTPUT
    | Id | Operation | Name | Rows | Bytes |TempSpc| Cost |
    | 0 | SELECT STATEMENT | | 807 | 102K| | 2533 |
    | 1 | SORT UNIQUE | | 807 | 102K| 232K| 82 |
    |* 2 | FILTER | | | | | |
    |* 3 | HASH JOIN OUTER | | 807 | 102K| | 52 |
    |* 4 | HASH JOIN OUTER | | 807 | 95226 | | 40 |
    |* 5 | TABLE ACCESS BY INDEX ROWID | ATTRIBUTE_VALUES | 1 | 23 | | 2 |
    | 6 | NESTED LOOPS | | 7 | 805 | | 37 |
    | 7 | NESTED LOOPS OUTER | | 6 | 552 | | 25 |
    |* 8 | FILTER | | | | | |
    | 9 | NESTED LOOPS OUTER | | | | | |
    |* 10 | FILTER | | | | | |
    | 11 | NESTED LOOPS OUTER | | | | | |
    | 12 | NESTED LOOPS OUTER | | 3 | 141 | | 10 |
    |* 13 | HASH JOIN | | 3 | 120 | | 7 |
    |* 14 | TABLE ACCESS FULL | PROFILE | 6 | 198 | | 4 |
    |* 15 | TABLE ACCESS FULL | PROFILE_TYPE | 1 | 7 | | 2 |
    |* 16 | INDEX RANGE SCAN | SYS_C0019777 | 1 | 7 | | 1 |
    | 17 | TABLE ACCESS BY INDEX ROWID| TBL_BDA_OFFICE | 1 | 10 | | 1 |
    |* 18 | INDEX UNIQUE SCAN | SYS_C0019800 | 1 | | | |
    | 19 | TABLE ACCESS BY INDEX ROWID | TBL_BDA_AGENCY_RESP_REP | 2 | 26 | | 2 |
    |* 20 | INDEX RANGE SCAN | IDX_AGECYRESP_AGNCYID | 2 | | | 1 |
    | 21 | TABLE ACCESS BY INDEX ROWID | USER_ | 1 | 22 | | 1 |
    |* 22 | INDEX UNIQUE SCAN | USER_PK | 1 | | | |
    |* 23 | INDEX RANGE SCAN | IDX_ATTVAL_ENTATTID | 1 | | | 1 |
    | 24 | TABLE ACCESS FULL | TBL_BDA_USR_ISS_GRP | 234 | 702 | | 2 |
    | 25 | TABLE ACCESS FULL | TBL_BDA_ISS_GROUP | 2 | 24 | | 2 |
    |* 26 | TABLE ACCESS BY INDEX ROWID | TBL_BDA_AGENCY_RESP_REP | 1 | 7 | | 3 |
    |* 27 | INDEX RANGE SCAN | IDX_AGECYRESP_AGNCYID | 2 | | | 1 |
    Predicate Information (identified by operation id):
    2 - filter( NOT EXISTS (SELECT /*+ */ 0 FROM "TBL_BDA_AGENCY_RESP_REP" "T" WHERE "T"."AGENCY_ID"=:B1
    AND "T"."ISS_GRP_ID"=TO_NUMBER('%')))
    3 - access("I"."ISS_GRP_ID"="J"."ISS_GRP_ID"(+))
    4 - access("SYS_ALIAS_1"."ISS_GRP_ID"="I"."ISS_GRP_ID"(+))
    5 - filter("K"."ATTRIBUTE_VALUE" IS NOT NULL AND "K"."ATTRIBUTE_VALUE" LIKE '%')
    8 - filter(NVL("SYS_ALIAS_1"."RESP_USR_ID",'0') LIKE '%' OR NVL("SYS_ALIAS_1"."RESP_USR_ID",'0')='k')
    10 - filter(NVL("G"."OFFICE_ID",0)=TO_NUMBER('%'))
    13 - access("L"."PROFILE_TYPE_ID"="B"."PROFILE_TYPE_ID")
    14 - filter(UPPER("B"."PROFILE_NM") LIKE '%' AND (TO_CHAR(NVL("B"."PROFILE_ID",0)) LIKE '%' OR
    NVL("B"."PROFILE_ID",0)=TO_NUMBER('a')))
    15 - filter("L"."APPLICATION_CD"='BDA')
    16 - access("B"."PROFILE_ID"="F"."AGENCY_ID"(+))
    18 - access("G"."OFFICE_ID"(+)="F"."OFFICE_ID")
    20 - access("B"."PROFILE_ID"="SYS_ALIAS_1"."AGENCY_ID"(+))
    22 - access("H"."USERID"(+)="SYS_ALIAS_1"."RESP_USR_ID")
    23 - access("K"."ENTITY_ID"='PROFILE.'||TO_CHAR("B"."PROFILE_ID"))
    26 - filter("T"."ISS_GRP_ID"=TO_NUMBER('%'))
    27 - access("T"."AGENCY_ID"=:B1)
    Note: cpu costing is off
    57 rows selected.
    Elapsed: 00:00:01.08
    Please help me.
    Aashish S.

    Hello Eric,
    Here is the code:
    SELECT DISTINCT
    K.ATTRIBUTE_VALUE AGENCY_ID,
    B.PROFILE_NM ,
    NVL(G.OFFICE_DESC,'--') OFFICE_DESC,
    f.OFFICE_ID,
    B.PROFILE_ID,
    '%' ROLE,
    '%' LAYOUT,
    case
    WHEN 'flagB' = '%' THEN
    NVL(J.ISS_GRP_DESC,'BILLING')
    WHEN 'flagO' = '%' THEN
    NVL(J.ISS_GRP_DESC,'ORDERING')
    WHEN 'flag' = '%' THEN
    NVL(J.ISS_GRP_DESC,'BILLING/ORDERING')
    else
    NVL(J.ISS_GRP_DESC,' ')
    END ISS_GRP_DESC,
    DECODE(NVL(H.USERID,' ') ,' ','--','&lt;a sbcuid_in=' || H.USERID || ' target=NEW &gt;'||H.FIRSTNAME || ' ' || H.LASTNAME ||
    '( ' || H.USERID || ' )&lt;/a&gt;' ) USER_NAME
    from
    PROFILE_PORTAL B ,
    TBL_BDA_AGENCY_RESP_REP C ,
    TBL_BDA_AGENCY_OFFICE F,
    TBL_BDA_OFFICE G,
    USERS_PORTAL H,
    TBL_BDA_USR_ISS_GRP I ,
    TBL_BDA_ISS_GROUP J,
    ATTRIBUTE_VALUES_PORTAL K,
    PROFILE_TYPE_PORTAL L
    WHERE
    B.PROFILE_ID = F.AGENCY_ID (+)
    AND B.PROFILE_ID = C.AGENCY_ID (+)
    AND G.OFFICE_ID (+)= F.OFFICE_ID
    AND H.USERID (+)= C.RESP_USR_ID
    AND C.ISS_GRP_ID = I.ISS_GRP_ID (+)
    AND I.ISS_GRP_ID = J.ISS_GRP_ID(+)
    AND 'PROFILE.'||B.PROFILE_ID = K.ENTITY_ID(+)
    AND K.ATTRIBUTE_VALUE IS NOT NULL
    AND L.PROFILE_TYPE_ID = B.PROFILE_TYPE_ID
    AND L.APPLICATION_CD='BDA'
    AND NOT EXISTS
    (SELECT agency_id
    FROM TBL_BDA_AGENCY_RESP_REP t
    WHERE t.ISS_GRP_ID IN (1)
    AND t.AGENCY_ID = C.AGENCY_ID)
    AND K.ATTRIBUTE_VALUE LIKE '%'
    AND UPPER(B.PROFILE_NM) LIKE UPPER('%')
    AND (to_char(NVL(B.PROFILE_ID,0))
    LIKE '%'
    OR NVL(B.PROFILE_ID,0) IN (1))
    AND NVL(G.OFFICE_ID,0) IN (1)
    AND (to_char(NVL(C.RESP_USR_ID,'0'))
    LIKE '%'
    OR NVL(C.RESP_USR_ID,'0') IN ('%'))
    ORDER BY PROFILE_NM
    This is the Query and the query takes some mins. to run in prod environment.
    From the Query plan ,I am not able to get any idea for optimization.
    Now,Can you tell me which steps I need to follow to run it faster and which all modifications should be made?
    Thanks.
    Aashish S.

  • Help tune this monster query please

    Hi, I have a query that runs for a long time. Its a system generated query but I need to improve its performance. I have enough indexes on the tables. Here is the query, its explain plan and the tkprof:
    The QUERY
    SELECT FD.FORM_ID, FD.FIELD_NAME, FD.FIELD_TEXT, FD.OPTION_TEXT, FD.OPTION_TYPE, FD.FIELD_ORDER, FD.LIST_ORDER,
    FD.MULTIPLE_ANSWER, FD.FIELD_INSTANCE, NVL(AD.APPS,0) APPS
    FROM (
        SELECT FIELD_NAME, FIELD_VALUE, INSTANCE, COUNT(0) APPS
        FROM APPLICATION_DATA AD
        WHERE APPLICATION_ID IN (
            SELECT A.APPLICATION_ID
            FROM APPLICATIONS A
            WHERE A.DELETED = 0 AND DECODE(A.TRAY,'Incomplete','Incomplete','Complete') = 'Complete' AND A.JOB_ID IN (
                SELECT JOB_ID
                FROM JOBS J
                WHERE J.ACCOUNT_ID IN (
                    SELECT ACCOUNT_ID
                        FROM AGENCY_ACCOUNTS CONNECT BY ACCOUNT_ID = PRIOR AGENCY_ID START WITH ACCOUNT_ID = J.ACCOUNT_ID ) )                  AND A.ACCOUNT_ID IN (
                        SELECT ACCOUNT_ID
                        FROM AGENCY_ACCOUNTS CONNECT BY ACCOUNT_ID = PRIOR AGENCY_ID START WITH ACCOUNT_ID = 113346 ) AND                       FIELD_NAME IN (
                            SELECT FIELD_NAME FROM APPLICATION_FIELDS
                                WHERE FIELD_TYPE IN ('Checkbox','Radio','Select','SelectM', 'RadioHoriz','RadioPara') ) )
        GROUP BY FIELD_NAME, FIELD_VALUE, INSTANCE ) AD, (
            SELECT AF.FORM_ID, AF.FIELD_NAME, AF.FIELD_TEXT, AFO.OPTION_TEXT, AFO.OPTION_TYPE, AF.FIELD_ORDER, AFO.LIST_ORDER,
            DECODE(AF.FIELD_TYPE,'Checkbox',1,'SelectM',1,0) MULTIPLE_ANSWER, AF.FIELD_INSTANCE
            FROM APPLICATION_FIELDS AF, APPLICATION_FIELD_OPTIONS AFO, JOB_FORMS JF
            WHERE AFO.FIELD_NAME = AF.FIELD_NAME AND AFO.FORM_ID = AF.FORM_ID AND JF.FORM_ID = AF.FORM_ID AND AF.FIELD_TYPE IN
            ('Checkbox','Radio','Select','SelectM', 'RadioHoriz','RadioPara') AND JF.JOB_ID IN (
                SELECT JOB_ID
                FROM JOBS J
                WHERE J.ACCOUNT_ID IN (
                    SELECT ACCOUNT_ID
                    FROM AGENCY_ACCOUNTS CONNECT BY ACCOUNT_ID = PRIOR AGENCY_ID START WITH ACCOUNT_ID = 113346 ) ) ) FD
    WHERE AD.FIELD_NAME = FD.FIELD_NAME AND AD.FIELD_VALUE = FD.OPTION_TEXT AND AD.INSTANCE = FD.FIELD_INSTANCE
    GROUP BY FD.FORM_ID, FD.FIELD_NAME, FD.FIELD_TEXT, FD.OPTION_TEXT, FD.OPTION_TYPE, FD.FIELD_ORDER, FD.LIST_ORDER,
    FD.MULTIPLE_ANSWER, FD.FIELD_INSTANCE, NVL(AD.APPS,0)
    ORDER BY FD.FORM_ID ASC, FD.FIELD_ORDER ASCEXPLAIN PLAN OUTPUT
    PLAN_TABLE_OUTPUT                                                                                                                                                                                      
    Plan hash value: 3519364953                                                                                                                                                                            
    | Id  | Operation                                   | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |                                                                             
    |   0 | SELECT STATEMENT                            |                            |     1 |   120 |   763   (2)| 00:00:10 |                                                                             
    |   1 |  SORT GROUP BY                              |                            |     1 |   120 |   763   (2)| 00:00:10 |                                                                             
    |   2 |   VIEW                                      |                            |     1 |   120 |   762   (1)| 00:00:10 |                                                                             
    |   3 |    HASH GROUP BY                            |                            |     1 |   220 |   762   (1)| 00:00:10 |                                                                             
    |*  4 |     FILTER                                  |                            |       |       |            |          |                                                                             
    |*  5 |      TABLE ACCESS BY INDEX ROWID            | APPLICATION_DATA           |     1 |    45 |     6   (0)| 00:00:01 |                                                                             
    PLAN_TABLE_OUTPUT                                                                                                                                                                                      
    |   6 |       NESTED LOOPS                          |                            |    40 |  8800 |   486   (2)| 00:00:06 |                                                                             
    |*  7 |        HASH JOIN                            |                            |    60 | 10500 |   125   (4)| 00:00:02 |                                                                             
    |*  8 |         HASH JOIN                           |                            |    60 |  7320 |    53   (6)| 00:00:01 |                                                                             
    |   9 |          NESTED LOOPS                       |                            |    11 |   297 |     9  (12)| 00:00:01 |                                                                             
    |  10 |           VIEW                              | VW_NSO_3                   |     3 |    15 |     5   (0)| 00:00:01 |                                                                             
    |  11 |            HASH UNIQUE                      |                            |     3 |    69 |            |          |                                                                             
    |  12 |             TABLE ACCESS BY INDEX ROWID     | JOBS                       |     3 |    30 |     3   (0)| 00:00:01 |                                                                             
    |  13 |              NESTED LOOPS                   |                            |     3 |    69 |     5   (0)| 00:00:01 |                                                                             
    |  14 |               VIEW                          | VW_NSO_1                   |     1 |    13 |     2   (0)| 00:00:01 |                                                                             
    |* 15 |                CONNECT BY WITH FILTERING    |                            |       |       |            |          |                                                                             
    |  16 |                 TABLE ACCESS BY INDEX ROWID | AGENCY_ACCOUNTS            |       |       |            |          |                                                                             
    PLAN_TABLE_OUTPUT                                                                                                                                                                                      
    |* 17 |                  INDEX UNIQUE SCAN          | AGENCY_ACCOUNTS_ACCOUNT_ID |     1 |     5 |     1   (0)| 00:00:01 |                                                                             
    |  18 |                 NESTED LOOPS                |                            |       |       |            |          |                                                                             
    |  19 |                  BUFFER SORT                |                            |       |       |            |          |                                                                             
    |  20 |                   CONNECT BY PUMP           |                            |       |       |            |          |                                                                             
    |  21 |                  TABLE ACCESS BY INDEX ROWID| AGENCY_ACCOUNTS            |     1 |    10 |     2   (0)| 00:00:01 |                                                                             
    |* 22 |                   INDEX UNIQUE SCAN         | AGENCY_ACCOUNTS_ACCOUNT_ID |     1 |       |     1   (0)| 00:00:01 |                                                                             
    |* 23 |                 TABLE ACCESS FULL           | AGENCY_ACCOUNTS            |     1 |    10 |     2   (0)| 00:00:01 |                                                                             
    |* 24 |               INDEX RANGE SCAN              | JOBS_ACCOUNT_ID            |     3 |       |     1   (0)| 00:00:01 |                                                                             
    |* 25 |           INDEX RANGE SCAN                  | JOBS_FORMS_JID_FID         |     4 |    88 |     1   (0)| 00:00:01 |                                                                             
    |* 26 |          TABLE ACCESS FULL                  | APPLICATION_FIELDS         |  3579 |   332K|    43   (3)| 00:00:01 |                                                                             
    |  27 |         TABLE ACCESS FULL                   | APPLICATION_FIELD_OPTIONS  | 32897 |  1702K|    72   (3)| 00:00:01 |                                                                             
    PLAN_TABLE_OUTPUT                                                                                                                                                                                      
    |* 28 |        INDEX RANGE SCAN                     | IDX$$_B8D40001             |     4 |       |     3   (0)| 00:00:01 |                                                                             
    |* 29 |      FILTER                                 |                            |       |       |            |          |                                                                             
    |  30 |       MERGE JOIN CARTESIAN                  |                            |     3 |   225 |    11   (0)| 00:00:01 |                                                                             
    |  31 |        NESTED LOOPS                         |                            |     1 |    53 |     6   (0)| 00:00:01 |                                                                             
    |  32 |         NESTED LOOPS                        |                            |     1 |    40 |     4   (0)| 00:00:01 |                                                                             
    |* 33 |          TABLE ACCESS BY INDEX ROWID        | APPLICATIONS               |     1 |    30 |     3   (0)| 00:00:01 |                                                                             
    |* 34 |           INDEX UNIQUE SCAN                 | APPS_APP_ID                |     1 |       |     2   (0)| 00:00:01 |                                                                             
    |  35 |          TABLE ACCESS BY INDEX ROWID        | JOBS                       | 18780 |   183K|     1   (0)| 00:00:01 |                                                                             
    |* 36 |           INDEX UNIQUE SCAN                 | JOBS_JOB_ID                |     1 |       |     0   (0)| 00:00:01 |                                                                             
    |* 37 |         VIEW                                | VW_NSO_2                   |     1 |    13 |     2   (0)| 00:00:01 |                                                                             
    |* 38 |          CONNECT BY WITH FILTERING          |                            |       |       |            |          |                                                                             
    PLAN_TABLE_OUTPUT                                                                                                                                                                                      
    |  39 |           TABLE ACCESS BY INDEX ROWID       | AGENCY_ACCOUNTS            |       |       |            |          |                                                                             
    |* 40 |            INDEX UNIQUE SCAN                | AGENCY_ACCOUNTS_ACCOUNT_ID |     1 |     5 |     1   (0)| 00:00:01 |                                                                             
    |  41 |           NESTED LOOPS                      |                            |       |       |            |          |                                                                             
    |  42 |            BUFFER SORT                      |                            |       |       |            |          |                                                                             
    |  43 |             CONNECT BY PUMP                 |                            |       |       |            |          |                                                                             
    |  44 |            TABLE ACCESS BY INDEX ROWID      | AGENCY_ACCOUNTS            |     1 |    10 |     2   (0)| 00:00:01 |                                                                             
    |* 45 |             INDEX UNIQUE SCAN               | AGENCY_ACCOUNTS_ACCOUNT_ID |     1 |       |     1   (0)| 00:00:01 |                                                                             
    |* 46 |           TABLE ACCESS FULL                 | AGENCY_ACCOUNTS            |     1 |    10 |     2   (0)| 00:00:01 |                                                                             
    |  47 |        BUFFER SORT                          |                            |     3 |    66 |     9   (0)| 00:00:01 |                                                                             
    |  48 |         INLIST ITERATOR                     |                            |       |       |            |          |                                                                             
    |* 49 |          INDEX RANGE SCAN                   | IDX$$_91CA0001             |     3 |    66 |     5   (0)| 00:00:01 |                                                                             
    PLAN_TABLE_OUTPUT                                                                                                                                                                                      
    |* 50 |       FILTER                                |                            |       |       |            |          |                                                                             
    |* 51 |        CONNECT BY WITH FILTERING            |                            |       |       |            |          |                                                                             
    |  52 |         TABLE ACCESS BY INDEX ROWID         | AGENCY_ACCOUNTS            |       |       |            |          |                                                                             
    |* 53 |          INDEX UNIQUE SCAN                  | AGENCY_ACCOUNTS_ACCOUNT_ID |     1 |     5 |     1   (0)| 00:00:01 |                                                                             
    |  54 |         NESTED LOOPS                        |                            |       |       |            |          |                                                                             
    |  55 |          BUFFER SORT                        |                            |       |       |            |          |                                                                             
    |  56 |           CONNECT BY PUMP                   |                            |       |       |            |          |                                                                             
    |  57 |          TABLE ACCESS BY INDEX ROWID        | AGENCY_ACCOUNTS            |     1 |    10 |     2   (0)| 00:00:01 |                                                                             
    |* 58 |           INDEX UNIQUE SCAN                 | AGENCY_ACCOUNTS_ACCOUNT_ID |     1 |       |     1   (0)| 00:00:01 |                                                                             
    |* 59 |         TABLE ACCESS FULL                   | AGENCY_ACCOUNTS            |     1 |    10 |     2   (0)| 00:00:01 |                                                                             
    PLAN_TABLE_OUTPUT                                                                                                                                                                                      
    Predicate Information (identified by operation id):                                                                                                                                                    
       4 - filter( EXISTS (SELECT 0 FROM "APPLICATIONS" "A","JOBS" "SYS_ALIAS_1", (SELECT "ACCOUNT_ID" "$nso_col_1"                                                                                        
                  FROM "AGENCY_ACCOUNTS" "AGENCY_ACCOUNTS" WHERE "ACCOUNT_ID"=NULL) "VW_NSO_2","APPLICATION_FIELDS"                                                                                        
                  "APPLICATION_FIELDS" WHERE  EXISTS (SELECT 0 FROM "AGENCY_ACCOUNTS" "AGENCY_ACCOUNTS" WHERE "ACCOUNT_ID"=NULL AND                                                                        
                  ("ACCOUNT_ID"=:B1)) AND ("FIELD_TYPE"='Checkbox' OR "FIELD_TYPE"='Radio' OR "FIELD_TYPE"='RadioHoriz' OR                                                                                 
                  "FIELD_TYPE"='RadioPara' OR "FIELD_TYPE"='Select' OR "FIELD_TYPE"='SelectM') AND "FIELD_NAME"=:B2 AND                                                                                    
                  "A"."ACCOUNT_ID"="$nso_col_1" AND "A"."JOB_ID"="JOB_ID" AND "A"."APPLICATION_ID"=:B3 AND                                                                                                 
                  DECODE("A"."TRAY",'Incomplete','Incomplete','Complete')='Complete' AND "A"."DELETED"=0))                                                                                                 
    PLAN_TABLE_OUTPUT                                                                                                                                                                                      
       5 - filter("FIELD_NAME"="AF"."FIELD_NAME" AND "INSTANCE"="AF"."FIELD_INSTANCE")                                                                                                                     
       7 - access("AFO"."FIELD_NAME"="AF"."FIELD_NAME" AND "AFO"."FORM_ID"="AF"."FORM_ID")                                                                                                                 
       8 - access("JF"."FORM_ID"="AF"."FORM_ID")                                                                                                                                                           
      15 - filter("ACCOUNT_ID"=113346)                                                                                                                                                                     
      17 - access("ACCOUNT_ID"=113346)                                                                                                                                                                     
      22 - access("ACCOUNT_ID"=NULL)                                                                                                                                                                       
      23 - access("ACCOUNT_ID"=NULL)                                                                                                                                                                       
      24 - access("J"."ACCOUNT_ID"="$nso_col_1")                                                                                                                                                           
      25 - access("JF"."JOB_ID"="$nso_col_1")                                                                                                                                                              
      26 - filter("AF"."FIELD_TYPE"='Checkbox' OR "AF"."FIELD_TYPE"='Radio' OR "AF"."FIELD_TYPE"='RadioHoriz' OR                                                                                           
                  "AF"."FIELD_TYPE"='RadioPara' OR "AF"."FIELD_TYPE"='Select' OR "AF"."FIELD_TYPE"='SelectM')                                                                                              
    PLAN_TABLE_OUTPUT  FOR THE QUERY                                                                                                                                                                                    
      28 - access("FIELD_VALUE"="AFO"."OPTION_TEXT")                                                                                                                                                       
      29 - filter( EXISTS (SELECT 0 FROM "AGENCY_ACCOUNTS" "AGENCY_ACCOUNTS" WHERE "ACCOUNT_ID"=NULL AND                                                                                                   
                  ("ACCOUNT_ID"=:B1)))                                                                                                                                                                     
      33 - filter(DECODE("A"."TRAY",'Incomplete','Incomplete','Complete')='Complete' AND "A"."DELETED"=0)                                                                                                  
      34 - access("A"."APPLICATION_ID"=:B1)                                                                                                                                                                
      36 - access("A"."JOB_ID"="JOB_ID")                                                                                                                                                                   
      37 - filter("A"."ACCOUNT_ID"="$nso_col_1")                                                                                                                                                           
      38 - filter("ACCOUNT_ID"=113346)                                                                                                                                                                     
      40 - access("ACCOUNT_ID"=113346)                                                                                                                                                                     
      45 - access("ACCOUNT_ID"=NULL)                                                                                                                                                                       
      46 - access("ACCOUNT_ID"=NULL)                                                                                                                                                                       
    PLAN_TABLE_OUTPUT                                                                                                                                                                                      
      49 - access("FIELD_NAME"=:B1 AND ("FIELD_TYPE"='Checkbox' OR "FIELD_TYPE"='Radio' OR "FIELD_TYPE"='RadioHoriz'                                                                                       
                  OR "FIELD_TYPE"='RadioPara' OR "FIELD_TYPE"='Select' OR "FIELD_TYPE"='SelectM'))                                                                                                         
      50 - filter("ACCOUNT_ID"=:B1)                                                                                                                                                                        
      51 - filter("ACCOUNT_ID"=:B1)                                                                                                                                                                        
      53 - access("ACCOUNT_ID"=:B1)                                                                                                                                                                        
      58 - access("ACCOUNT_ID"=NULL)                                                                                                                                                                       
      59 - access("ACCOUNT_ID"=NULL)                                                                                                                                                                       
    106 rows selected.TKPROF FOR THE QUERY
    call     count       cpu    elapsed       disk      query    current        rows
    Parse        1      0.05       0.08          0          0          0           0
    Execute      1      0.00       0.00          0          0          0           0
    Fetch       17   1040.45    1018.36          0   48926569          0         229
    total       19   1040.50    1018.44          0   48926569          0         229
    Misses in library cache during parse: 1
    Optimizer mode: ALL_ROWS
    Parsing user id: 68
    Rows     Row Source Operation
        229  SORT GROUP BY (cr=48926569 pr=0 pw=0 time=1018362160 us)
        454   VIEW  (cr=48926569 pr=0 pw=0 time=1018361382 us)
        454    HASH GROUP BY (cr=48926569 pr=0 pw=0 time=1018360468 us)
    185302     FILTER  (cr=48926569 pr=0 pw=0 time=877249113 us)
    1440799      TABLE ACCESS BY INDEX ROWID APPLICATION_DATA (cr=11309333 pr=0 pw=0 time=213262026 us)
    82907114       NESTED LOOPS  (cr=174051 pr=0 pw=0 time=166906535 us)
       1790        HASH JOIN  (cr=625 pr=0 pw=0 time=41617 us)
        121         HASH JOIN  (cr=310 pr=0 pw=0 time=11263 us)
         39          NESTED LOOPS  (cr=121 pr=0 pw=0 time=6894 us)
         44           VIEW  VW_NSO_3 (cr=75 pr=0 pw=0 time=6424 us)
         44            HASH UNIQUE (cr=75 pr=0 pw=0 time=6333 us)
         44             TABLE ACCESS BY INDEX ROWID JOBS (cr=75 pr=0 pw=0 time=3090 us)
         52              NESTED LOOPS  (cr=32 pr=0 pw=0 time=58177 us)
          7               VIEW  VW_NSO_1 (cr=23 pr=0 pw=0 time=1242 us)
          7                CONNECT BY WITH FILTERING (cr=23 pr=0 pw=0 time=1212 us)
          1                 TABLE ACCESS BY INDEX ROWID AGENCY_ACCOUNTS (cr=3 pr=0 pw=0 time=185 us)
          1                  INDEX UNIQUE SCAN AGENCY_ACCOUNTS_ACCOUNT_ID (cr=2 pr=0 pw=0 time=100 us)(object id 60086)
          6                 NESTED LOOPS  (cr=20 pr=0 pw=0 time=590 us)
          7                  BUFFER SORT (cr=0 pr=0 pw=0 time=248 us)
          7                   CONNECT BY PUMP  (cr=0 pr=0 pw=0 time=95 us)
          6                  TABLE ACCESS BY INDEX ROWID AGENCY_ACCOUNTS (cr=20 pr=0 pw=0 time=314 us)
          6                   INDEX UNIQUE SCAN AGENCY_ACCOUNTS_ACCOUNT_ID (cr=14 pr=0 pw=0 time=188 us)(object id 60086)
          0                 TABLE ACCESS FULL AGENCY_ACCOUNTS (cr=0 pr=0 pw=0 time=0 us)
         44               INDEX RANGE SCAN JOBS_ACCOUNT_ID (cr=9 pr=0 pw=0 time=280 us)(object id 60253)
         39           INDEX RANGE SCAN JOBS_FORMS_JID_FID (cr=46 pr=0 pw=0 time=968 us)(object id 60299)
       3579          TABLE ACCESS FULL APPLICATION_FIELDS (cr=189 pr=0 pw=0 time=14469 us)
      32524         TABLE ACCESS FULL APPLICATION_FIELD_OPTIONS (cr=315 pr=0 pw=0 time=32629 us)
    82905323        INDEX RANGE SCAN IDX$$_B8D40001 (cr=173426 pr=0 pw=0 time=83870105 us)(object id 60121)
    185297      FILTER  (cr=37617236 pr=0 pw=0 time=749052070 us)
    185297       MERGE JOIN CARTESIAN (cr=37617196 pr=0 pw=0 time=742583363 us)
    185297        NESTED LOOPS  (cr=35393366 pr=0 pw=0 time=706772617 us)
    1139675         NESTED LOOPS  (cr=9180841 pr=0 pw=0 time=84949686 us)
    1140164          TABLE ACCESS BY INDEX ROWID APPLICATIONS (cr=5760834 pr=0 pw=0 time=46774108 us)
    1440060           INDEX UNIQUE SCAN APPS_APP_ID (cr=4320774 pr=0 pw=0 time=24380604 us)(object id 60107)
    1139675          TABLE ACCESS BY INDEX ROWID JOBS (cr=3420007 pr=0 pw=0 time=28126171 us)
    1139675           INDEX UNIQUE SCAN JOBS_JOB_ID (cr=2280328 pr=0 pw=0 time=14563524 us)(object id 60252)
    185297         VIEW  VW_NSO_2 (cr=26212525 pr=0 pw=0 time=613602445 us)
    6866175          CONNECT BY WITH FILTERING (cr=26212525 pr=0 pw=0 time=614183170 us)
    1139675           TABLE ACCESS BY INDEX ROWID AGENCY_ACCOUNTS (cr=3419025 pr=0 pw=0 time=24323520 us)
    1139675            INDEX UNIQUE SCAN AGENCY_ACCOUNTS_ACCOUNT_ID (cr=2279350 pr=0 pw=0 time=13905212 us)(object id 60086)
    6838050           NESTED LOOPS  (cr=22793500 pr=0 pw=0 time=388173853 us)
    7977725            BUFFER SORT (cr=0 pr=0 pw=0 time=178812411 us)
    7977725             CONNECT BY PUMP  (cr=0 pr=0 pw=0 time=57522094 us)
    6838050            TABLE ACCESS BY INDEX ROWID AGENCY_ACCOUNTS (cr=22793500 pr=0 pw=0 time=179425469 us)
    6838050             INDEX UNIQUE SCAN AGENCY_ACCOUNTS_ACCOUNT_ID (cr=15955450 pr=0 pw=0 time=113988543 us)(object id 60086)
          0           TABLE ACCESS FULL AGENCY_ACCOUNTS (cr=0 pr=0 pw=0 time=0 us)
    185297        BUFFER SORT (cr=2223830 pr=0 pw=0 time=24721936 us)
    1208625         INLIST ITERATOR  (cr=2223830 pr=0 pw=0 time=26470412 us)
    1208625          INDEX RANGE SCAN IDX$$_91CA0001 (cr=2223830 pr=0 pw=0 time=18174073 us)(object id 60129)
          2       FILTER  (cr=40 pr=0 pw=0 time=1292 us)
          2        CONNECT BY WITH FILTERING (cr=40 pr=0 pw=0 time=1276 us)
          2         TABLE ACCESS BY INDEX ROWID AGENCY_ACCOUNTS (cr=6 pr=0 pw=0 time=86 us)
          2          INDEX UNIQUE SCAN AGENCY_ACCOUNTS_ACCOUNT_ID (cr=4 pr=0 pw=0 time=46 us)(object id 60086)
         10         NESTED LOOPS  (cr=34 pr=0 pw=0 time=791 us)
         12          BUFFER SORT (cr=0 pr=0 pw=0 time=369 us)
         12           CONNECT BY PUMP  (cr=0 pr=0 pw=0 time=127 us)
         10          TABLE ACCESS BY INDEX ROWID AGENCY_ACCOUNTS (cr=34 pr=0 pw=0 time=376 us)
         10           INDEX UNIQUE SCAN AGENCY_ACCOUNTS_ACCOUNT_ID (cr=24 pr=0 pw=0 time=242 us)(object id 60086)
          0         TABLE ACCESS FULL AGENCY_ACCOUNTS (cr=0 pr=0 pw=0 time=0 us)Any help in tuning this query to run faster will be highly appreciated. I also noticed merge join certesian on the tkprof and explain plan. Any idea in takling that will also be appreciated.
    Cheers,
    Ade

    It's quite hard to tune a query without seeing the table structure and available indices as well as relationship between each other but I'll try.
    In your sql which you've given the table alias AD, you have this filter criteria
                  AND    FIELD_NAME IN (                        
                         SELECT FIELD_NAME
                         FROM   APPLICATION_FIELDS                            
                         WHERE  FIELD_TYPE IN ('Checkbox','Radio','Select','SelectM', 'RadioHoriz','RadioPara')
                         ) </br>
    My question is, is FIELD_NAME a column in the APPLICATION_DATA table? If it is, try moving this clause outside of the current sub-query it is in, i.e. one more level up. It looks like you put them inside the wrong level.
    I would also try converting this <COL> IN <SUB-QUERY> to a join, if that wouldn't affect the no. of rows returned. I can't tell for sure since I dont know the relationship between your tables.
    It looks to me like you're doing this
    SELECT <col list>
    FROM   ( SELECT                                         -- LEVEL 1
             FROM   APPLICATION_DATA AD
             WHERE  AD.APPLICAITON_ID IN (                  -- LEVEL 2
                    SELECT
                    FROM   APPLICATIONS A
                    WHERE  A.JOB_ID IN (
                           <SUBQUERY>
                    AND    A.ACCOUNT_ID IN (
                           <SUBQUERY>
                    AND FIELDNAME IN ( -- SHOULD BE INSIDE LEVEL1
    <SUBQUERY>
           ) AD,
           ( SELECT ....
           ) FD
    WHERE  ....

  • How do tune sql query? Can somebody help me in this? Atleast prescribe book

    how do tune sql query? Can somebody help me in this? Atleast prescribe a reference book.
    I am not able understand How to analyze tkproof output.

    Check out asktom.oracle.com
    Lot's of threads on interpreting tkprof output - no simple easy solution here.
    You need to understand what is happening and THINK. Then you can be a good engineer.
    As for good books...
    Tom Kyte's books are really, really good.
    http://www.amazon.com/Effective-Oracle-Design-Osborne-ORACLE/dp/0072230657/ref=sr_1_3?ie=UTF8&s=books&qid=1266783471&sr=8-3
    http://www.amazon.com/Expert-Oracle-Database-Architecture-Programming/dp/1590595300/ref=sr_1_1?ie=UTF8&s=books&qid=1266783471&sr=8-1
    Good luck!

  • Sql Query Tuning. Please help me to tune this query

    Hi All ,
    I have this problematic Sql . It is taking huge time to execute. It contains a view CIDV, which i think is the bottleneck.
    I have pasted the query below. I will be pasting TKPROF and explain plan for the same. Please advice me to tune this query.
    SELECT GCC.SEGMENT1 || '.' || GCC.SEGMENT2 || '.' || GCC.SEGMENT3 || '.' ||
           GCC.SEGMENT4 || '.' || GCC.SEGMENT5 || '.' || GCC.SEGMENT6 || '.' ||
           GCC.SEGMENT7 || '.' || GCC.SEGMENT8 || '.' || GCC.SEGMENT9 OFFSET_ACCOUNT,
           OOD.ORGANIZATION_CODE,
           CIDV.SUBINVENTORY_CODE OFFSET_SUBINV,
           MIL.SEGMENT1 || '.' || MIL.SEGMENT2 || '.' || MIL.SEGMENT3 || '.' ||
           MIL.SEGMENT4 || '.' || MIL.SEGMENT5 OFFSET_LOCATOR,
           CIDV.LAST_UPDATE_LOGIN
      FROM APPS.CST_INV_DISTRIBUTION_V       CIDV,
           APPS.GL_CODE_COMBINATIONS         GCC,
           APPS.MTL_ITEM_LOCATIONS           MIL,
           APPS.ORG_ORGANIZATION_DEFINITIONS OOD
    WHERE CIDV.TRANSACTION_ID = :B2
       AND CIDV.PRIMARY_QUANTITY = (-1) * :B1
       AND CIDV.REFERENCE_ACCOUNT = GCC.CODE_COMBINATION_ID
       AND OOD.ORGANIZATION_ID = CIDV.ORGANIZATION_ID
       AND MIL.INVENTORY_LOCATION_ID = CIDV.LOCATOR_ID
       AND GCC.ACCOUNT_TYPE = 'A'****************
    TKPROF
    call     count       cpu    elapsed       disk      query    current        rows
    Parse        1      0.00       0.00          0          0          0           0
    Execute  68337     10.32      10.32          0          0          0           0
    Fetch    68337    229.75     936.36      58819    6743323       1121       68232
    total   136675    240.07     946.69      58819    6743323       1121       68232
    Misses in library cache during parse: 1
    Misses in library cache during execute: 1
    Optimizer mode: ALL_ROWS
    Parsing user id: 203     (recursive depth: 1)
    Number of plan statistics captured: 1
    Rows (1st) Rows (avg) Rows (max)  Row Source Operation
             1          1          1  MERGE JOIN CARTESIAN (cr=102 pr=15 pw=0 time=193608 us cost=56 size=219 card=1)
             1          1          1   NESTED LOOPS  (cr=100 pr=15 pw=0 time=193483 us cost=53 size=219 card=1)
             1          1          1    NESTED LOOPS  (cr=99 pr=15 pw=0 time=193407 us cost=52 size=215 card=1)
             1          1          1     NESTED LOOPS  (cr=96 pr=15 pw=0 time=193378 us cost=51 size=190 card=1)
             1          1          1      NESTED LOOPS  (cr=93 pr=15 pw=0 time=193284 us cost=49 size=162 card=1)
             1          1          1       NESTED LOOPS  (cr=89 pr=14 pw=0 time=185515 us cost=46 size=138 card=1)
             1          1          1        NESTED LOOPS  (cr=85 pr=12 pw=0 time=157975 us cost=44 size=81 card=1)
             1          1          1         NESTED LOOPS  (cr=83 pr=12 pw=0 time=157925 us cost=43 size=73 card=1)
             1          1          1          NESTED LOOPS  (cr=81 pr=12 pw=0 time=157641 us cost=43 size=132 card=2)
             1          1          1           VIEW  CST_INV_DISTRIBUTION_V (cr=78 pr=12 pw=0 time=156386 us cost=41 size=118 card=2)
             1          1          1            UNION-ALL  (cr=78 pr=12 pw=0 time=156378 us)
             0          0          0             NESTED LOOPS OUTER (cr=44 pr=9 pw=0 time=124997 us cost=20 size=291 card=1)
             0          0          0              NESTED LOOPS  (cr=44 pr=9 pw=0 time=124993 us cost=18 size=255 card=1)
             0          0          0               NESTED LOOPS  (cr=44 pr=9 pw=0 time=124990 us cost=18 size=251 card=1)
            33         33         33                MERGE JOIN CARTESIAN (cr=25 pr=6 pw=0 time=98544 us cost=14 size=192 card=1)
             1          1          1                 NESTED LOOPS OUTER (cr=22 pr=5 pw=0 time=85754 us cost=12 size=156 card=1)
             1          1          1                  NESTED LOOPS  (cr=19 pr=4 pw=0 time=79830 us cost=10 size=120 card=1)
             1          1          1                   NESTED LOOPS OUTER (cr=17 pr=4 pw=0 time=79813 us cost=9 size=113 card=1)
             1          1          1                    NESTED LOOPS  (cr=15 pr=4 pw=0 time=79752 us cost=8 size=106 card=1)
             1          1          1                     NESTED LOOPS  (cr=11 pr=2 pw=0 time=43120 us cost=6 size=93 card=1)
             1          1          1                      NESTED LOOPS  (cr=7 pr=2 pw=0 time=43087 us cost=4 size=83 card=1)
             1          1          1                       NESTED LOOPS  (cr=6 pr=2 pw=0 time=43072 us cost=4 size=80 card=1)
             1          1          1                        TABLE ACCESS BY INDEX ROWID MTL_MATERIAL_TRANSACTIONS (cr=5 pr=2 pw=0 time=43042 us cost=4 size=76 card=1)
             1          1          1                         INDEX UNIQUE SCAN MTL_MATERIAL_TRANSACTIONS_U1 (cr=4 pr=2 pw=0 time=43011 us cost=3 size=0 card=1)(object id 12484094)
             1          1          1                        INDEX UNIQUE SCAN MTL_TRANSACTION_TYPES_U1 (cr=1 pr=0 pw=0 time=20 us cost=0 size=764 card=191)(object id 9983)
             1          1          1                       INDEX UNIQUE SCAN MTL_TXN_SOURCE_TYPES_U1 (cr=1 pr=0 pw=0 time=7 us cost=0 size=54 card=18)(object id 9987)
             1          1          1                      INDEX UNIQUE SCAN MTL_SYSTEM_ITEMS_B_U1 (cr=4 pr=0 pw=0 time=27 us cost=2 size=736324450 card=73632445)(object id 12484155)
             1          1          1                     INDEX UNIQUE SCAN MTL_SYSTEM_ITEMS_TL_U1 (cr=4 pr=2 pw=0 time=36626 us cost=2 size=957481070 card=73652390)(object id 12484137)
             1          1          1                    TABLE ACCESS BY INDEX ROWID MTL_PARAMETERS (cr=2 pr=0 pw=0 time=42 us cost=1 size=3290 card=470)
             1          1          1                     INDEX UNIQUE SCAN MTL_PARAMETERS_U1 (cr=1 pr=0 pw=0 time=28 us cost=0 size=0 card=1)(object id 9847)
             1          1          1                   TABLE ACCESS BY INDEX ROWID MTL_PARAMETERS (cr=2 pr=0 pw=0 time=12 us cost=1 size=3290 card=470)
             1          1          1                    INDEX UNIQUE SCAN MTL_PARAMETERS_U1 (cr=1 pr=0 pw=0 time=7 us cost=0 size=0 card=1)(object id 9847)
             0          0          0                  INDEX RANGE SCAN FND_LOOKUP_VALUES_U1 (cr=3 pr=1 pw=0 time=5915 us cost=2 size=36 card=1)(object id 705891)
            33         33         33                 BUFFER SORT (cr=3 pr=1 pw=0 time=12713 us cost=12 size=36 card=1)
            33         33         33                  INDEX RANGE SCAN FND_LOOKUP_VALUES_U1 (cr=3 pr=1 pw=0 time=12582 us cost=2 size=36 card=1)(object id 705891)
             0          0          0                TABLE ACCESS BY INDEX ROWID MTL_TRANSACTION_ACCOUNTS (cr=19 pr=3 pw=0 time=26591 us cost=4 size=59 card=1)
            66         66         66                 INDEX RANGE SCAN MTL_TRANSACTION_ACCOUNTS_N1 (cr=18 pr=2 pw=0 time=13607 us cost=3 size=0 card=3)(object id 12484127)
             0          0          0               INDEX UNIQUE SCAN MTL_PARAMETERS_U1 (cr=0 pr=0 pw=0 time=0 us cost=0 size=4 card=1)(object id 9847)
             0          0          0              INDEX RANGE SCAN FND_LOOKUP_VALUES_U1 (cr=0 pr=0 pw=0 time=0 us cost=2 size=36 card=1)(object id 705891)
             1          1          1             NESTED LOOPS  (cr=34 pr=3 pw=0 time=31269 us cost=21 size=288 card=1)
             1          1          1              NESTED LOOPS  (cr=30 pr=3 pw=0 time=31161 us cost=19 size=275 card=1)
             1          1          1               NESTED LOOPS  (cr=26 pr=3 pw=0 time=31105 us cost=17 size=265 card=1)
             1          1          1                NESTED LOOPS  (cr=25 pr=3 pw=0 time=31082 us cost=17 size=261 card=1)
             1          1          1                 NESTED LOOPS OUTER (cr=23 pr=3 pw=0 time=31027 us cost=16 size=254 card=1)
             1          1          1                  NESTED LOOPS  (cr=21 pr=3 pw=0 time=30980 us cost=15 size=247 card=1)
             1          1          1                   NESTED LOOPS  (cr=20 pr=3 pw=0 time=30957 us cost=15 size=243 card=1)
             1          1          1                    NESTED LOOPS OUTER (cr=19 pr=3 pw=0 time=30926 us cost=15 size=240 card=1)
             1          1          1                     NESTED LOOPS  (cr=16 pr=3 pw=0 time=30389 us cost=13 size=204 card=1)
             1          1          1                      NESTED LOOPS  (cr=11 pr=0 pw=0 time=665 us cost=9 size=131 card=1)
             1          1          1                       NESTED LOOPS OUTER (cr=8 pr=0 pw=0 time=306 us cost=7 size=95 card=1)
             1          1          1                        TABLE ACCESS BY INDEX ROWID MTL_TRANSACTION_ACCOUNTS (cr=5 pr=0 pw=0 time=37 us cost=5 size=59 card=1)
             2          2          2                         INDEX RANGE SCAN MTL_TRANSACTION_ACCOUNTS_N1 (cr=4 pr=0 pw=0 time=17 us cost=4 size=0 card=3)(object id 12484127)
             1          1          1                        INDEX RANGE SCAN FND_LOOKUP_VALUES_U1 (cr=3 pr=0 pw=0 time=216 us cost=2 size=36 card=1)(object id 705891)
             1          1          1                       INDEX RANGE SCAN FND_LOOKUP_VALUES_U1 (cr=3 pr=0 pw=0 time=352 us cost=2 size=36 card=1)(object id 705891)
             1          1          1                      TABLE ACCESS BY INDEX ROWID MTL_MATERIAL_TRANSACTIONS (cr=5 pr=3 pw=0 time=29716 us cost=4 size=73 card=1)
             1          1          1                       INDEX RANGE SCAN MTL_MATERIAL_TRANSACTIONS_N23 (cr=4 pr=3 pw=0 time=29588 us cost=3 size=0 card=1)(object id 12484133)
             0          0          0                     INDEX RANGE SCAN FND_LOOKUP_VALUES_U1 (cr=3 pr=0 pw=0 time=520 us cost=2 size=36 card=1)(object id 705891)
             1          1          1                    INDEX UNIQUE SCAN MTL_TXN_SOURCE_TYPES_U1 (cr=1 pr=0 pw=0 time=22 us cost=0 size=3 card=1)(object id 9987)
             1          1          1                   INDEX UNIQUE SCAN MTL_TRANSACTION_TYPES_U1 (cr=1 pr=0 pw=0 time=16 us cost=0 size=4 card=1)(object id 9983)
             1          1          1                  TABLE ACCESS BY INDEX ROWID MTL_PARAMETERS (cr=2 pr=0 pw=0 time=34 us cost=1 size=7 card=1)
             1          1          1                   INDEX UNIQUE SCAN MTL_PARAMETERS_U1 (cr=1 pr=0 pw=0 time=19 us cost=0 size=0 card=1)(object id 9847)
             1          1          1                 TABLE ACCESS BY INDEX ROWID MTL_PARAMETERS (cr=2 pr=0 pw=0 time=44 us cost=1 size=7 card=1)
             1          1          1                  INDEX UNIQUE SCAN MTL_PARAMETERS_U1 (cr=1 pr=0 pw=0 time=14 us cost=0 size=0 card=1)(object id 9847)
             1          1          1                INDEX UNIQUE SCAN MTL_PARAMETERS_U1 (cr=1 pr=0 pw=0 time=13 us cost=0 size=4 card=1)(object id 9847)
             1          1          1               INDEX UNIQUE SCAN MTL_SYSTEM_ITEMS_B_U1 (cr=4 pr=0 pw=0 time=49 us cost=2 size=10 card=1)(object id 12484155)
             1          1          1              INDEX UNIQUE SCAN MTL_SYSTEM_ITEMS_TL_U1 (cr=4 pr=0 pw=0 time=96 us cost=2 size=13 card=1)(object id 12484137)
             1          1          1           TABLE ACCESS BY INDEX ROWID HR_ALL_ORGANIZATION_UNITS (cr=3 pr=0 pw=0 time=1246 us cost=1 size=7 card=1)
             1          1          1            INDEX UNIQUE SCAN HR_ORGANIZATION_UNITS_PK (cr=2 pr=0 pw=0 time=24 us cost=0 size=0 card=1)(object id 250158)
             1          1          1          INDEX UNIQUE SCAN HR_ALL_ORGANIZATION_UNTS_TL_PK (cr=2 pr=0 pw=0 time=275 us cost=0 size=7 card=1)(object id 689101)
             1          1          1         TABLE ACCESS BY INDEX ROWID MTL_PARAMETERS (cr=2 pr=0 pw=0 time=38 us cost=1 size=8 card=1)
             1          1          1          INDEX UNIQUE SCAN MTL_PARAMETERS_U1 (cr=1 pr=0 pw=0 time=15 us cost=0 size=0 card=1)(object id 9847)
             1          1          1        TABLE ACCESS BY INDEX ROWID GL_CODE_COMBINATIONS (cr=4 pr=2 pw=0 time=27531 us cost=2 size=57 card=1)
             1          1          1         INDEX UNIQUE SCAN GL_CODE_COMBINATIONS_U1 (cr=3 pr=1 pw=0 time=19925 us cost=1 size=0 card=1)(object id 51426)
             1          1          1       TABLE ACCESS BY INDEX ROWID MTL_ITEM_LOCATIONS (cr=4 pr=1 pw=0 time=7758 us cost=3 size=24 card=1)
             1          1          1        INDEX RANGE SCAN MTL_ITEM_LOCATIONS_U1 (cr=3 pr=0 pw=0 time=51 us cost=2 size=0 card=1)(object id 9761)
             1          1          1      TABLE ACCESS BY INDEX ROWID HR_ORGANIZATION_INFORMATION (cr=3 pr=0 pw=0 time=85 us cost=2 size=28 card=1)
             1          1          1       INDEX RANGE SCAN HR_ORGANIZATION_INFORMATIO_FK2 (cr=2 pr=0 pw=0 time=29 us cost=1 size=0 card=2)(object id 5379798)
             1          1          1     TABLE ACCESS BY INDEX ROWID HR_ORGANIZATION_INFORMATION (cr=3 pr=0 pw=0 time=25 us cost=1 size=25 card=1)
             1          1          1      INDEX RANGE SCAN HR_ORGANIZATION_INFORMATIO_FK2 (cr=2 pr=0 pw=0 time=11 us cost=1 size=0 card=1)(object id 5379798)
             1          1          1    INDEX FULL SCAN GL_SETS_OF_BOOKS_U2 (cr=1 pr=0 pw=0 time=69 us cost=1 size=4 card=1)(object id 1380842)
             1          1          1   BUFFER SORT (cr=2 pr=0 pw=0 time=110 us cost=55 size=0 card=1)
             1          1          1    TABLE ACCESS FULL FND_PRODUCT_GROUPS (cr=2 pr=0 pw=0 time=59 us cost=3 size=0 card=1)
    Elapsed times include waiting on following events:
      Event waited on                             Times   Max. Wait  Total Waited
      ----------------------------------------   Waited  ----------  ------------
      library cache lock                              2        0.00          0.00
      library cache pin                               2        0.00          0.00
      Disk file operations I/O                      249        0.00          0.00
      db file sequential read                     58819        2.61        714.28
      gc cr grant 2-way                            5198        0.16          4.52
      gc current grant busy                           1        0.00          0.00
      KJC: Wait for msg sends to complete           517        0.00          0.05
      library cache: mutex X                        433        0.01          0.04
      gc cr grant congested                          28        0.08          0.18
      latch: ges resource hash list                   5        0.00          0.00
      gc current block 2-way                        513        0.11          0.61
      gc current block congested                      2        0.00          0.00
      latch: gc element                              16        0.00          0.01
      latch: cache buffers chains                     4        0.00          0.00
      latch: object queue header operation            3        0.00          0.00
    ********************************************************************************

    Explain Plan for the query
    SELECT STATEMENT, GOAL = ALL_ROWS               Cost=56     Cardinality=1     Bytes=219
    MERGE JOIN CARTESIAN               Cost=56     Cardinality=1     Bytes=219
      NESTED LOOPS               Cost=53     Cardinality=1     Bytes=219
       NESTED LOOPS               Cost=52     Cardinality=1     Bytes=215
        NESTED LOOPS               Cost=51     Cardinality=1     Bytes=190
         NESTED LOOPS               Cost=49     Cardinality=1     Bytes=162
          NESTED LOOPS               Cost=46     Cardinality=1     Bytes=138
           NESTED LOOPS               Cost=44     Cardinality=1     Bytes=81
            NESTED LOOPS               Cost=43     Cardinality=1     Bytes=73
             NESTED LOOPS               Cost=43     Cardinality=2     Bytes=132
              VIEW     Object owner=APPS     Object name=CST_INV_DISTRIBUTION_V     Cost=41     Cardinality=2     Bytes=118
               UNION-ALL                         
                NESTED LOOPS OUTER               Cost=20     Cardinality=1     Bytes=291
                 NESTED LOOPS               Cost=18     Cardinality=1     Bytes=255
                  NESTED LOOPS               Cost=18     Cardinality=1     Bytes=251
                   MERGE JOIN CARTESIAN               Cost=14     Cardinality=1     Bytes=192
                    NESTED LOOPS OUTER               Cost=12     Cardinality=1     Bytes=156
                     NESTED LOOPS               Cost=10     Cardinality=1     Bytes=120
                      NESTED LOOPS OUTER               Cost=9     Cardinality=1     Bytes=113
                       NESTED LOOPS               Cost=8     Cardinality=1     Bytes=106
                        NESTED LOOPS               Cost=6     Cardinality=1     Bytes=93
                         NESTED LOOPS               Cost=4     Cardinality=1     Bytes=83
                          NESTED LOOPS               Cost=4     Cardinality=1     Bytes=80
                           TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_MATERIAL_TRANSACTIONS     Cost=4     Cardinality=1     Bytes=76
                            INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_MATERIAL_TRANSACTIONS_U1     Cost=3     Cardinality=1     
                           INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_TRANSACTION_TYPES_U1     Cost=0     Cardinality=191     Bytes=764
                          INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_TXN_SOURCE_TYPES_U1     Cost=0     Cardinality=18     Bytes=54
                         INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_SYSTEM_ITEMS_B_U1     Cost=2     Cardinality=73632445     Bytes=736324450
                        INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_SYSTEM_ITEMS_TL_U1     Cost=2     Cardinality=73652390     Bytes=957481070
                       TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_PARAMETERS     Cost=1     Cardinality=470     Bytes=3290
                        INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_PARAMETERS_U1     Cost=0     Cardinality=1     
                      TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_PARAMETERS     Cost=1     Cardinality=470     Bytes=3290
                       INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_PARAMETERS_U1     Cost=0     Cardinality=1     
                     INDEX RANGE SCAN     Object owner=APPLSYS     Object name=FND_LOOKUP_VALUES_U1     Cost=2     Cardinality=1     Bytes=36
                    BUFFER SORT               Cost=12     Cardinality=1     Bytes=36
                     INDEX RANGE SCAN     Object owner=APPLSYS     Object name=FND_LOOKUP_VALUES_U1     Cost=2     Cardinality=1     Bytes=36
                   TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_TRANSACTION_ACCOUNTS     Cost=4     Cardinality=1     Bytes=59
                    INDEX RANGE SCAN     Object owner=INV     Object name=MTL_TRANSACTION_ACCOUNTS_N1     Cost=3     Cardinality=3     
                  INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_PARAMETERS_U1     Cost=0     Cardinality=1     Bytes=4
                 INDEX RANGE SCAN     Object owner=APPLSYS     Object name=FND_LOOKUP_VALUES_U1     Cost=2     Cardinality=1     Bytes=36
                NESTED LOOPS               Cost=21     Cardinality=1     Bytes=288
                 NESTED LOOPS               Cost=19     Cardinality=1     Bytes=275
                  NESTED LOOPS               Cost=17     Cardinality=1     Bytes=265
                   NESTED LOOPS               Cost=17     Cardinality=1     Bytes=261
                    NESTED LOOPS OUTER               Cost=16     Cardinality=1     Bytes=254
                     NESTED LOOPS               Cost=15     Cardinality=1     Bytes=247
                      NESTED LOOPS               Cost=15     Cardinality=1     Bytes=243
                       NESTED LOOPS OUTER               Cost=15     Cardinality=1     Bytes=240
                        NESTED LOOPS               Cost=13     Cardinality=1     Bytes=204
                         NESTED LOOPS               Cost=9     Cardinality=1     Bytes=131
                          NESTED LOOPS OUTER               Cost=7     Cardinality=1     Bytes=95
                           TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_TRANSACTION_ACCOUNTS     Cost=5     Cardinality=1     Bytes=59
                            INDEX RANGE SCAN     Object owner=INV     Object name=MTL_TRANSACTION_ACCOUNTS_N1     Cost=4     Cardinality=3     
                           INDEX RANGE SCAN     Object owner=APPLSYS     Object name=FND_LOOKUP_VALUES_U1     Cost=2     Cardinality=1     Bytes=36
                          INDEX RANGE SCAN     Object owner=APPLSYS     Object name=FND_LOOKUP_VALUES_U1     Cost=2     Cardinality=1     Bytes=36
                         TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_MATERIAL_TRANSACTIONS     Cost=4     Cardinality=1     Bytes=73
                          INDEX RANGE SCAN     Object owner=INV     Object name=MTL_MATERIAL_TRANSACTIONS_N23     Cost=3     Cardinality=1     
                        INDEX RANGE SCAN     Object owner=APPLSYS     Object name=FND_LOOKUP_VALUES_U1     Cost=2     Cardinality=1     Bytes=36
                       INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_TXN_SOURCE_TYPES_U1     Cost=0     Cardinality=1     Bytes=3
                      INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_TRANSACTION_TYPES_U1     Cost=0     Cardinality=1     Bytes=4
                     TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_PARAMETERS     Cost=1     Cardinality=1     Bytes=7
                      INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_PARAMETERS_U1     Cost=0     Cardinality=1     
                    TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_PARAMETERS     Cost=1     Cardinality=1     Bytes=7
                     INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_PARAMETERS_U1     Cost=0     Cardinality=1     
                   INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_PARAMETERS_U1     Cost=0     Cardinality=1     Bytes=4
                  INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_SYSTEM_ITEMS_B_U1     Cost=2     Cardinality=1     Bytes=10
                 INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_SYSTEM_ITEMS_TL_U1     Cost=2     Cardinality=1     Bytes=13
              TABLE ACCESS BY INDEX ROWID     Object owner=HR     Object name=HR_ALL_ORGANIZATION_UNITS     Cost=1     Cardinality=1     Bytes=7
               INDEX UNIQUE SCAN     Object owner=HR     Object name=HR_ORGANIZATION_UNITS_PK     Cost=0     Cardinality=1     
             INDEX UNIQUE SCAN     Object owner=HR     Object name=HR_ALL_ORGANIZATION_UNTS_TL_PK     Cost=0     Cardinality=1     Bytes=7
            TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_PARAMETERS     Cost=1     Cardinality=1     Bytes=8
             INDEX UNIQUE SCAN     Object owner=INV     Object name=MTL_PARAMETERS_U1     Cost=0     Cardinality=1     
           TABLE ACCESS BY INDEX ROWID     Object owner=GL     Object name=GL_CODE_COMBINATIONS     Cost=2     Cardinality=1     Bytes=57
            INDEX UNIQUE SCAN     Object owner=GL     Object name=GL_CODE_COMBINATIONS_U1     Cost=1     Cardinality=1     
          TABLE ACCESS BY INDEX ROWID     Object owner=INV     Object name=MTL_ITEM_LOCATIONS     Cost=3     Cardinality=1     Bytes=24
           INDEX RANGE SCAN     Object owner=INV     Object name=MTL_ITEM_LOCATIONS_U1     Cost=2     Cardinality=1     
         TABLE ACCESS BY INDEX ROWID     Object owner=HR     Object name=HR_ORGANIZATION_INFORMATION     Cost=2     Cardinality=1     Bytes=28
          INDEX RANGE SCAN     Object owner=HR     Object name=HR_ORGANIZATION_INFORMATIO_FK2     Cost=1     Cardinality=2     
        TABLE ACCESS BY INDEX ROWID     Object owner=HR     Object name=HR_ORGANIZATION_INFORMATION     Cost=1     Cardinality=1     Bytes=25
         INDEX RANGE SCAN     Object owner=HR     Object name=HR_ORGANIZATION_INFORMATIO_FK2     Cost=1     Cardinality=1     
       INDEX FULL SCAN     Object owner=GL     Object name=GL_SETS_OF_BOOKS_U2     Cost=1     Cardinality=1     Bytes=4
      BUFFER SORT               Cost=55     Cardinality=1     
       TABLE ACCESS FULL     Object owner=APPLSYS     Object name=FND_PRODUCT_GROUPS     Cost=3     Cardinality=1     

  • Help needed in query optimization.....

    Hi
    I have this below query which automatically gets generated in siebel.
    Problem is when i execute this query in toad for "Nichole" it took 2 mins to return 30 records but when i execute this same query for "Adam" it returns more records than Nichole and return results in 1-2 secs. i Know executing query in toad is not a proper way but this below query will get executed in same way thru siebel application. Histogram is already created on column "Name" but of no help. Composite Index(CX_AA_EVNT_RADIO_BATCH_TIME) is there on column bot_id & timestp.
    Table s_org_ext has only 5 records of "Nichole" and 10 records of "Adam".
    Will including Column "Name" in Above composite index can help?
    Please anybody can suggest me anything in this? whatelse i can do to tune this query?
    Thanks for your help in advance
    Chandan Singh
    Also, don't know how better i can format this code :-(
    SELECT t7.conflict_id, t7.last_upd, t7.created, t7.last_upd_by,
    t7.created_by, t7.modification_num, t7.row_id, t7.last_upd,
    t7.aa_acount_id, t7.aa_last_step, t7.accessory, t7.account_exists,
    t7.account_number, t7.actn_cd, t7.action_counter, t7.activated_by,
    t7.address, t7.address_2, t7.address_validation_status,
    t4.account_name, t7.aggregated_account_id, t7.aggregated_flag,
    t7.asset_id, t7.auto_delivery_type, t7.auto_make, t7.auto_model,
    t7.auto_year, t7.automated_approval, t7.activation_frequency,
    FROM siebel.s_prod_int t1,
    siebel.s_org_ext t2,
    siebel.s_asset t3,
    siebel.av_account t4,
    siebel.s_org_ext t5,
    siebel.s_prod_int_x t6,
    siebel.av_event t7
    WHERE t1.row_id = t6.par_row_id(+)
    AND t7.promotion_code = t1.part_num(+)
    AND t7.asset_id = t3.row_id(+)
    AND t3.owner_accnt_id = t5.par_row_id(+)
    AND t7.id = t2.par_row_id --- S_ORG_EXT_U3
    AND t7.id1 = t4.row_id(+)
    AND (t2.NAME = 'Nichole')
    ORDER BY t7.bot_id, t7.timestp
    Below is the execution plan for above query.
    Execution Plan
    0 SELECT STATEMENT Optimizer=CHOOSE (Cost=399904 Card=5609601 Bytes=4930839279)
    1 0 NESTED LOOPS (OUTER) (Cost=399904 Card=5609601 Bytes=4930839279)
    2 1 NESTED LOOPS (OUTER) (Cost=343808 Card=5609601 Bytes=4824256860)
    3 2 NESTED LOOPS (OUTER) (Cost=231616 Card=5609601 Bytes=4740112845)
    4 3 NESTED LOOPS (OUTER) (Cost=175520 Card=5609601 Bytes=4482071199)
    5 4 NESTED LOOPS (OUTER) (Cost=119424 Card=5609601 Bytes=4325002371)
    6 5 NESTED LOOPS (Cost=63328 Card=5609601 Bytes=4240858356)
    7 6 TABLE ACCESS (BY INDEX ROWID) OF 'av_event' (Cost=6729 Card=5659910 Bytes=4126074390)
    8 7 INDEX (FULL SCAN) OF 'av_event_timpstp' (NON-UNIQUE) (Cost=24559 Card=5659910)
    9 6 TABLE ACCESS (BY INDEX ROWID) OF 'S_ORG_EXT' (Cost=1 Card=1 Bytes=27)
    10 9 INDEX (UNIQUE SCAN) OF 'S_ORG_EXT_U3' (UNIQUE)
    11 5 TABLE ACCESS (BY INDEX ROWID) OF 'S_PROD_INT' (Cost=1 Card=1 Bytes=15)
    12 11 INDEX (RANGE SCAN) OF 'S_PROD_INT_M3' (NON-UNIQUE)
    13 4 TABLE ACCESS (BY INDEX ROWID) OF 'av_account' (Cost=1 Card=1 Bytes=28)
    14 13 INDEX (UNIQUE SCAN) OF 'av_account_P1' (UNIQUE)
    15 3 TABLE ACCESS (BY INDEX ROWID) OF 'S_ASSET' (Cost=1 Card=1 Bytes=46)
    16 15 INDEX (UNIQUE SCAN) OF 'S_ASSET_P1' (UNIQUE)
    17 2 TABLE ACCESS (BY INDEX ROWID) OF 'S_PROD_INT_X' (Cost=1 Card=1 Bytes=15)
    18 17 INDEX (RANGE SCAN) OF 'S_PROD_INT_X_U1' (UNIQUE) (Cost=1 Card=1)
    19 1 TABLE ACCESS (BY INDEX ROWID) OF 'S_ORG_EXT' (Cost=1 Card=1 Bytes=19)
    20 19 INDEX (UNIQUE SCAN) OF 'S_ORG_EXT_U3' (UNIQUE)
    Below is the No. of records in each table.
    NUM_ROWS     LAST_ANALYZED     TABLE_NAME     BLOCKS
    5,594,027.00     09/08/2006 03:03:02     av_account     92,565.00
    6,659,910.00     09/22/2006 16:14:06     av_event      608,292.00
    15,384,080.00     09/22/2006 15:28:04     S_ASSET     1,244,124.00
    10,249,905.00     04/23/2006 23:51:44     S_ORG_EXT     2,313,814.00
    1,081.00     09/22/2006 15:26:12     S_PROD_INT     129.00
    602.00     09/08/2006 04:39:42     S_PROD_INT_X     10.00

    can you plz try this
    SELECT /*+ LEADING(t2) */ t7.conflict_id, t7.last_upd, t7.created, t7.last_upd_by,
    t7.created_by, t7.modification_num, t7.row_id, t7.last_upd,
    t7.aa_acount_id, t7.aa_last_step, t7.accessory, t7.account_exists,
    t7.account_number, t7.actn_cd, t7.action_counter, t7.activated_by,
    t7.address, t7.address_2, t7.address_validation_status,
    t4.account_name, t7.aggregated_account_id, t7.aggregated_flag,
    t7.asset_id, t7.auto_delivery_type, t7.auto_make, t7.auto_model,
    t7.auto_year, t7.automated_approval, t7.activation_frequency,
    FROM siebel.s_prod_int t1,
    siebel.s_org_ext t2,
    siebel.s_asset t3,
    siebel.av_account t4,
    siebel.s_org_ext t5,
    siebel.s_prod_int_x t6,
    siebel.av_event t7
    WHERE t1.row_id = t6.par_row_id(+)
    AND t7.promotion_code = t1.part_num(+)
    AND t7.asset_id = t3.row_id(+)
    AND t3.owner_accnt_id = t5.par_row_id(+)
    AND t7.id = t2.par_row_id --- S_ORG_EXT_U3
    AND t7.id1 = t4.row_id(+)
    AND (t2.NAME = 'Nichole')
    ORDER BY t7.bot_id, t7.timestp

  • Please tune my query written in PL/SQL.

    Hi there,
    I really appreciate you if could tune my query.
    Here I am using tow tables PRDT_MASTER with 7 thosound records, REG_SUM with 50 records.
    I get nearly 10 thosound records to my cursor.
    From these 10 thosound records I have to prepare an SQL STATEMENT with dynamic sql.
    That query selects sum() from ACTUALDATA table (This table contains nearly 75thosound records).
    Then that data has to be inserted in to another table PROD_BRAND.
    I had a predesigned tables where i can't change or create any index, Infact no tables any no index. There is no primary key on the columns also.
    Now my problem is while i execute this procedure it is taking nearly 1 hour. I don't know why it is taking that much time. Is it because of dynamic sql and without any indexes?
    Or IS IT NECESSARY for me to change anything???
    Is there any alteranative way for me to over come from this problem....
    Your help is really appreciatable bench mark for me.
    I HAVE A TYPE FETCHCURSOR FOR REFCURSOR.
    PROCEDURE PROD_MASTER_PRO
         (DATE1      IN DATE
         ,DATE2 IN DATE
         ,TYPE     IN VARCHAR2
         )      AS
              MAINCUR                MYPACK.FETCHCURSOR;
         COU                     NUMBER(20);
         V_SUM                    NUMBER(20);
              V_SBUCODE               VARCHAR2(255);
              V_CATCODE                VARCHAR2(255);
              V_BRANDCODE               VARCHAR2(255);
              V_PRODCODE           VARCHAR2(255);
              V_TYPE                    VARCHAR2(10):= UPPER(TYPE);          
              REGNAME                    REG_SUM.REGION%TYPE;
              CONDITION               REG_SUM.COND%TYPE;
              QRY                         VARCHAR2(2000);                                                       
         BEGIN
    --//This is for different catcodes codes
              OPEN MAINCUR FOR
              SELECT DISTINCT SBUCODE,CATCODE,PRODCODE,REGION ,COND
              FROM PRDT_MASTER, REG_SUM
              WHERE PRDT_MASTER.SBUCODE=REG_SUM.SUB
              AND PRDT_MASTER.PRODCODE IS NOT NULL     
              ORDER BY SBUCODE,CATCODE,PRODCODE;
              LOOP FETCH MAINCUR INTO V_SBUCODE,V_CATCODE,V_PRODCODE,REGNAME,CONDITION;
              EXIT WHEN MAINCUR%NOTFOUND;
                   --SELECT NVL(SUM(GROSS),0) INTO V_SUM FROM ACTUALDATA WHERE PROD_CODE=V_PRODCODE
                   --AND (TRUNC(INV_DATE) BETWEEN  DATE1 AND DATE2);
                   QRY:=     'SELECT NVL(SUM(GROSS),0) FROM ACTUALDATA     ';               
                   QRY:=     QRY||'     WHERE PROD_CODE= :V_PRODCODE_BIND ';     
                   QRY:=     QRY||'     AND (TRUNC(INV_DATE) BETWEEN :DATE1_BIND AND :DATE2_BIND      )';
                   QRY:=     QRY||'     AND '||CONDITION;
                   EXECUTE IMMEDIATE QRY INTO V_SUM     USING V_PRODCODE ,DATE1,DATE2;
                   INSERT INTO PROD_BRAND
                   (     PROD_CODE,     SBUCODE ,     CODE ,
                        SUM ,     TYPE ,     CODE_TYPE,
                        REGION     
                   )     VALUES
                   (     V_PRODCODE,     V_SBUCODE,     V_CATCODE,
                        V_SUM,          PROD_MASTER_PRO.TYPE,     'THERAPY',
                        REGNAME     
              END LOOP;
              CLOSE MAINCUR;          
              COMMIT;
         END;
    regards,
    Khaleel.

    Parsing SQL is complex. Parsing SQL dynamically at run-time inside a FCAG policy function to determine what predicate to add, is a terribly bad idea. Performance wise and security wise.
    Can you be more specific (basic example) of what you are trying to achieve? And more importantly, what business requirement you are attempting to solve with this approach?
    Perhaps if we understand the full details, we can better assist you.

  • Please tune this query.

    Hi Experts,
    My below query is taking long time.
    [code]SELECT FAX_LIST.*
        FROM (SELECT /*+ use_nl(fax, src)  */
                    ROW_NUMBER () OVER (ORDER BY fax.ID ASC NULLS FIRST) RN,
                     fax.ACCOUNT_TYPE,
                     fax.BU_FILE_LOCATION,
                     fax.COUNT_PAGES_RECEIVED,
                     NVL (fax.CUSTOMER_NAME, fax.SENDER_NAME) AS CUSTOMER_NAME,
                     fax.FAX_SOURCE,
                     fax.CUSTOMER_NUMBER,
                     fax.CUSTOMER_OMEGA_NUMBER,
                     fax.GENIFAX_RECIPIENT_ID,
                     fax.ID AS FAX_ID,
                     fax.DATE_RECEIVED AS FAX_RECEIVED,
                     fax.IS_LOCKED,
                     fax.LOCKED_BY,
                     fax.ORIGINATOR_CSI,
                     fax.MARGIN,
                     fax.PAYMENT_TYPE,
                     fax.PRIORITY_CODE,
                     fax.PRIORITY_VALUE,
                     FROM_TZ (fax.DATE_RECEIVED, 'UTC')
                        AT TIME ZONE fax.LOCAL_TZ_NAME
                        AS DATE_RECEIVED,
                     fax.SALES_PERSON,
                     fax.SENDER_EMAIL,
                     fax.SENDER_NAME,
                     fax.SUBJECT,
                     fax.WORKGROUP_ID,
                     fax.LOCKED_TIME,
                     src.DESCRIPTION,
                     src.FAX_NUMBER,
                     src.WORKFLOW_ID,
                     fax.CREATED_BY,
                     fax.CREATED_DATE,
                     fax.UPDATE_DATE,
                     fax.UPDATED_BY,
                     fax.RESERVED_BY,
                     fax.PRICE_TO_ORDER,
                     fax.SKU_COUNT_TO_ORDER,
                     NVL (ORL.GET_FTH_WTR (fax.LAST_TRANSITION_ID).CHANGED_BY,
                        CASE
                           WHEN fax.LAST_TRANSITION_ID IS NULL
                                AND fax.GENIFAX_RECIPIENT_ID IS NOT NULL
                           THEN
                              'ORL FEEDER'
                           ELSE
                              'Admin'
                        END)
                        AS LAST_USER,
                     FROM_TZ (
                        NVL (ORL.GET_FTH_WTR (fax.LAST_TRANSITION_ID).CHANGED_DATE,
                             fax.DATE_RECEIVED),
                        'UTC')
                        AT TIME ZONE fax.LOCAL_TZ_NAME
                        AS MOVE_DATETIME,
                     NVL (ORL.GET_FTH_WTR (fax.LAST_TRANSITION_ID).REASON,
                          'Reroute')
                        AS MOVE_REASON,
                     NVL (
                        (SELECT fw.DESCRIPTION
                           FROM ORL.WORKGROUP_TRANSITION wt, ORL.WORKGROUP fw
                          WHERE wt.ID =
                                   ORL.GET_FTH_WTR (fax.LAST_TRANSITION_ID).WORKGROUP_TRANSITION_ID
                                AND fw.ID = wt.CURRENT_WORKGROUP_ID),
                        CASE
                           WHEN fax.LAST_TRANSITION_ID IS NULL
                                AND fax.GENIFAX_RECIPIENT_ID IS NOT NULL
                           THEN
                              'ORL FEEDER STAGING'
                           ELSE
                              'N/A'
                        END)
                        AS OLD_STATUS,
                     (SELECT MAX (PURCHASE_ORDER_NUMBER)
                        FROM ORL.FAX_OFFER_DETAIL
                       WHERE FAX_ID = fax.ID)
                        AS MAXPO,
                     (SELECT CASE COUNT (PURCHASE_ORDER_NUMBER)
                                WHEN 0 THEN NULL
                                ELSE COUNT (PURCHASE_ORDER_NUMBER)
                             END
                                AS POCOUNT
                        FROM ORL.FAX_OFFER_DETAIL
                       WHERE FAX_ID = fax.ID)
                        AS POCOUNT,
                     (SELECT SUM (VALUE) AS ORDER_VALUE
                        FROM ORL.FAX_OFFER_DETAIL
                       WHERE FAX_ID = fax.ID)
                        AS ORDER_VALUE,
                     fax.SALESPERSON_NAME,
                     fax.GROUP_NAME,
                     fax.ROLE_NAME,
                     fax.EMAIL,
                     fax.SALES_CHANNEL
                FROM (SELECT fax.*,
                             map.ORACLE_TZ_NAME AS LOCAL_TZ_NAME,
                             ORL.GET_SALESPERSON (map.ORG_ID, fax.SALES_PERSON).SALESPERSON_NAME
                                AS SALESPERSON_NAME,
                             ORL.GET_SALESPERSON (map.ORG_ID, fax.SALES_PERSON).GROUP_NAME
                                AS GROUP_NAME,
                             ORL.GET_SALESPERSON (map.ORG_ID, fax.SALES_PERSON).ROLE_NAME
                                AS ROLE_NAME,
                             ORL.GET_SALESPERSON (map.ORG_ID, fax.SALES_PERSON).EMAIL
                                AS EMAIL,
                             ORL.GET_SALESPERSON (map.ORG_ID, fax.SALES_PERSON).SALES_CHANNEL
                                AS SALES_CHANNEL
                        FROM APPS_GLOBAL.GLOBAL_BU_MAPPING map,
                             (SELECT *
                                FROM ORL.FAX_HEADER FH
                               WHERE FH.WORKGROUP_ID = 262) fax
                       WHERE map.GEDIS = 'Y'
                             AND map.BU_ID = (SELECT BUID
                                                FROM ORL.WORKGROUP
                                               WHERE ID = fax.WORKGROUP_ID)
                             AND ORL.GET_SALESPERSON (map.ORG_ID, fax.SALES_PERSON).SALESPERSON_NAME =
                                    'A_CARRICK') fax,
                     (SELECT *
                        FROM ORL.FAX_SOURCE FS
                       WHERE FS.WORKFLOW_ID IN
                                (SELECT  /*+ CARDINALITY(t, 1) */
                                       TO_NUMBER (
                                           COLUMN_VALUE)
                                           AS COLUMN_VALUE
                                   FROM TABLE (
                                           SplitClob ('1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
            16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
            32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
            48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
            64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
            80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
            96, 97, 98', ',')) t)) src
               WHERE src.ID(+) = fax.FAX_SOURCE) FAX_LIST
       WHERE RN BETWEEN 1 AND 100
    ORDER BY RN ASC;[/code]
    In my query the following three functions are using.
    ORL.GET_FTH_WTR
    ORL.GET_SALESPERSON
    APPS_GLOBAL.SplitClob
    [code]CREATE OR REPLACE FUNCTION ORL.GET_FTH_WTR(p_LAST_TRANSITION_ID NUMBER)
            RETURN ORL.FTH_WTR_T
            DETERMINISTIC
        IS
            v_REASON nvarchar2(1024 char);
            v_WORKGROUP_TRANSITION_ID number;
            v_CHANGED_BY nvarchar2(64 char);
            v_CHANGED_DATE timestamp(6);
        BEGIN
        SELECT
            WTR.REASON,
            wtr.WORKGROUP_TRANSITION_ID,
            fth.CHANGED_BY,
            fth.CHANGED_DATE
        INTO
            v_REASON,
            v_WORKGROUP_TRANSITION_ID,
            v_CHANGED_BY,
            v_CHANGED_DATE
        FROM
            ORL.FAX_TRANSITION_HISTORY fth,
            ORL.WORKGROUP_TRANSITION_REASON wtr
        WHERE
             fth.ID = p_LAST_TRANSITION_ID
            AND wtr.ID(+) = fth.TRANSITION_REASON_ID;
        RETURN ORL.FTH_WTR_T(v_CHANGED_BY, v_CHANGED_DATE, v_REASON, v_WORKGROUP_TRANSITION_ID);
        EXCEPTION
            WHEN NO_DATA_FOUND THEN
            RETURN ORL.FTH_WTR_T(NULL, NULL, NULL, NULL);
        END GET_FTH_WTR;
    CREATE OR REPLACE function ORL.GET_SALESPERSON(ORG_ID number, SALESPERSON_ID number)
        return ORL.SALESPERSON_T
        deterministic
    is
        apps_bu             varchar2(30);
        salesperson_name    varchar2(150 char);
        email               varchar2(70 char);
        sales_channel       varchar2(60 char);
        role_name           varchar2(60 char);
        group_name          varchar2(60 char);
    begin
        select OWNER_NAME into apps_bu
          from APPS_GLOBAL.GLOBAL_BU_MAPPING
         where ORG_ID = GET_SALESPERSON.ORG_ID;
        execute immediate
        replace('
            select SALESPERSON_NAME
                 , EMAIL
                 , SALES_CHANNEL
                 , ROLE_NAME
                 , GROUP_NAME
              from APPS_**.ORL_ACTIVE_SALESPERSON
             where SALESPERSON_ID = :1
      and  rownum = 1
                ', 'APPS_**', apps_bu)
        into salesperson_name, email, sales_channel, role_name, group_name
        using SALESPERSON_ID;
        return SALESPERSON_T(ORG_ID, SALESPERSON_ID, salesperson_name, email, sales_channel, role_name, group_name);
    exception
        when no_data_found then
            return SALESPERSON_T(null, null, null, null, null, null, null);
    end GET_SALESPERSON;
    CREATE OR REPLACE function APPS_GLOBAL.SplitClob
        p_clob          clob
      , p_delimiter     varchar2 := ','
    return StringTable
    deterministic
    pipelined
    as
        v_current_pos   pls_integer := 1;
        v_delimiter_pos pls_integer;
    begin
        if (p_clob is not NULL) and (p_delimiter is not NULL) then
            while v_current_pos <= length(p_clob) loop
                v_delimiter_pos := instr(p_clob, p_delimiter, v_current_pos);
                if  v_delimiter_pos < 1  then   -- no more delimiters
                    v_delimiter_pos := length(p_clob) + 1;
                end if;
                pipe row( to_char( substr(p_clob,
                                          v_current_pos,
                                          v_delimiter_pos - v_current_pos) ) );
                v_current_pos := v_delimiter_pos + length(p_delimiter);
            end loop;
        end if;
    end SplitClob;
    CREATE OR REPLACE TYPE SALESPERSON_T  AS OBJECT
      SALESPERSON_ID        number(15)
    , SALESPERSON_NUMBER    varchar2(150 char)
    , FIRST_NAME            varchar2(20 char)
    , LAST_NAME             varchar2(40 char)
    , SALES_CHANNEL         varchar2(60 char)
    , ORG_ID                number(15)
    , USER_NAME             varchar2(61 char)
    , EFFECTIVE_START_DATE  date
    , EFFECTIVE_END_DATE    date
    , STATUS_FLAG           varchar2(1 char)
    , EMAIL                 varchar2(70 char)
    , WORK_TELEPHONE        varchar2(60 char)
    , MANAGERS_NAME         varchar2(50 char)
    , FAX_NO                varchar2(60 char)
    , SALESPERSON_NAME      varchar2(30 char)
    , TERRITORY             varchar2(40 char)
    , FO_LOGON              varchar2(150 char)
    , BO_LOGON              varchar2(150 char)
    , SUB_CHANNEL           varchar2(25 char)
    , BUSINESS_SEGMENT      varchar2(3 char)
    , DISCOUNT_NAME         varchar2(30 char)
    , RESPONSIBILITY_ID     number
    , RESPONSIBILITY_KEY    varchar2(30 char)
    CREATE OR REPLACE TYPE STRINGTABLE as table of varchar2(4000);[/code]
    The total number of records in each table.
    [code]SELECT COUNT(*) FROM ORL.FAX_HEADER FH --4397829
    SELECT COUNT(*) FROM APPS_GLOBAL.GLOBAL_BU_MAPPING map --31
    SELECT COUNT(*) FROM ORL.WORKGROUP_TRANSITION  --6735
    SELECT COUNT(*) FROM ORL.WORKGROUP fw --1495
    SELECT COUNT(*) FROM ORL.FAX_OFFER_DETAIL --5904039
    SELECT COUNT(*) FROM  ORL.FAX_SOURCE--2368 --2457[/code]
    Indexes on the columns.
    [code]ORL.WORKGROUP_TRANSITION(ID),
    ORL.WORKGROUP(ID),
    ORL.FAX_OFFER_DETAIL(FAX_ID),
    ORL.FAX_HEADER(WORKGROUP_ID).[/code]
    Please help me to tune this query.
    Thanks in advance.

    Hi,
    Thanks for your reply.
    For split the numbers into different rows , we are sending randomly.
    It's not constant numbers.We have used bind variables.
    For testing purpose I have hard coded the values.
    How to do this split without using user defined function.
    I am sending the actual query along with execution plan without any hints.
    [code]SELECT   FAX_LIST.*
      FROM   (SELECT   ROW_NUMBER () OVER (ORDER BY fax.ID ASC) RN,
                       fax.ACCOUNT_TYPE,
                       fax.BU_FILE_LOCATION,
                       fax.COUNT_PAGES_RECEIVED,
                       NVL (fax.CUSTOMER_NAME, fax.SENDER_NAME) AS CUSTOMER_NAME,
                       fax.FAX_SOURCE,
                       fax.CUSTOMER_NUMBER,
                       fax.CUSTOMER_OMEGA_NUMBER,
                       fax.GENIFAX_RECIPIENT_ID,
                       fax.ID AS FAX_ID,
                       fax.DATE_RECEIVED AS FAX_RECEIVED,
                       fax.IS_LOCKED,
                       fax.LOCKED_BY,
                       fax.ORIGINATOR_CSI,
                       fax.MARGIN,
                       fax.PAYMENT_TYPE,
                       fax.PRIORITY_CODE,
                       fax.PRIORITY_VALUE,
                       FROM_TZ (fax.DATE_RECEIVED, 'UTC') AT TIME ZONE map.ORACLE_TZ_NAME AS DATE_RECEIVED,
                       fax.SALES_PERSON,
                       fax.SENDER_EMAIL,
                       fax.SENDER_NAME,
                       fax.SUBJECT,
                       fax.WORKGROUP_ID,
                       fax.LOCKED_TIME,
                       src.DESCRIPTION,
                       src.FAX_NUMBER,
                       src.WORKFLOW_ID,
                       fax.CREATED_BY,
                       fax.CREATED_DATE,
                       fax.UPDATE_DATE,
                       fax.UPDATED_BY,
                       fax.RESERVED_BY,
                       fax.PRICE_TO_ORDER,
                       fax.SKU_COUNT_TO_ORDER,
                       NVL (
                          ORL.GET_FTH_WTR (fax.LAST_TRANSITION_ID).CHANGED_BY,
                          CASE
                             WHEN fax.LAST_TRANSITION_ID IS NULL
                                  AND fax.GENIFAX_RECIPIENT_ID IS NOT NULL
                             THEN
                                'ORL FEEDER'
                             ELSE
                                'Admin'
                          END
                          AS LAST_USER,
                       FROM_TZ (NVL (ORL.GET_FTH_WTR (fax.LAST_TRANSITION_ID).CHANGED_DATE,fax.DATE_RECEIVED),'UTC')
                       AT TIME ZONE map.ORACLE_TZ_NAME AS MOVE_DATETIME,
                       NVL (ORL.GET_FTH_WTR (fax.LAST_TRANSITION_ID).REASON,'Reroute')AS MOVE_REASON,
                       NVL ((SELECT   fw.DESCRIPTION
                             FROM   ORL.WORKGROUP_TRANSITION wt, ORL.WORKGROUP fw
                            WHERE   wt.ID =
                                       ORL.GET_FTH_WTR (
                                          fax.LAST_TRANSITION_ID
                                       ).WORKGROUP_TRANSITION_ID
                                    AND fw.ID = wt.CURRENT_WORKGROUP_ID),
                          CASE
                             WHEN fax.LAST_TRANSITION_ID IS NULL
                                  AND fax.GENIFAX_RECIPIENT_ID IS NOT NULL
                             THEN
                                'ORL FEEDER STAGING'
                             ELSE
                                'N/A'
                          END
                          AS OLD_STATUS,
                       (SELECT   MAX (PURCHASE_ORDER_NUMBER)
                          FROM   ORL.FAX_OFFER_DETAIL
                         WHERE   FAX_ID = fax.ID)
                          AS MAXPO,
                       (SELECT   CASE COUNT (PURCHASE_ORDER_NUMBER)
                                    WHEN 0 THEN NULL
                                    ELSE COUNT (PURCHASE_ORDER_NUMBER)
                                 END
                                    AS POCOUNT
                          FROM   ORL.FAX_OFFER_DETAIL
                         WHERE   FAX_ID = fax.ID)
                          AS POCOUNT,
                       (SELECT   SUM (VALUE) AS ORDER_VALUE
                          FROM   ORL.FAX_OFFER_DETAIL
                         WHERE   FAX_ID = fax.ID) AS ORDER_VALUE,
                       ORL.GET_SALESPERSON (map.ORG_ID,fax.SALES_PERSON).SALESPERSON_NAME AS SALESPERSON_NAME,
                       ORL.GET_SALESPERSON (map.ORG_ID,fax.SALES_PERSON).GROUP_NAME AS GROUP_NAME,
                       ORL.GET_SALESPERSON (map.ORG_ID,fax.SALES_PERSON).ROLE_NAME AS ROLE_NAME,
                       ORL.GET_SALESPERSON (map.ORG_ID, fax.SALES_PERSON).EMAIL AS EMAIL,
                       ORL.GET_SALESPERSON (map.ORG_ID, fax.SALES_PERSON).SALES_CHANNEL AS SALES_CHANNEL
                FROM   ORL.FAX_HEADER fax,
                       APPS_GLOBAL.GLOBAL_BU_MAPPING map,
                       ORL.FAX_SOURCE src
               WHERE       fax.WORKGROUP_ID = :WORKGROUP_ID
                       AND map.GEDIS = 'Y'
                       AND map.BU_ID = (SELECT   BUID
                                          FROM   ORL.WORKGROUP
                                         WHERE   ID = fax.WORKGROUP_ID)
                       AND ORL.GET_SALESPERSON (map.ORG_ID,fax.SALES_PERSON).GROUP_NAME =:SALES_TEAM
                       AND ORL.GET_SALESPERSON (map.ORG_ID,fax.SALES_PERSON
                          ).SALESPERSON_NAME = :SALESPERSON_NAME
                       AND src.WORKFLOW_ID IN
                                (SELECT TO_NUMBER (COLUMN_VALUE) AS COLUMN_VALUE
                                   FROM table(SplitClob (:WORKFLOW_ID,:WORKFLOW_ID_delim)) t)
                       AND src.ID(+) = fax.FAX_SOURCE) FAX_LIST
    WHERE   RN BETWEEN 1 AND 100;
    Execution Plan
    | Id  | Operation                               | Name                    | Rows  | Bytes | Cost (%CPU)|
    |   0 | SELECT STATEMENT                        |                         |     2 | 12092 | 88923   (1)|
    |   1 |  NESTED LOOPS                           |                         |     1 |    38 |     3   (0)|
    |   2 |   TABLE ACCESS BY INDEX ROWID           | WORKGROUP_TRANSITION    |     1 |     9 |     2   (0)|
    |   3 |    INDEX UNIQUE SCAN                    | PK_WORKGROUP_TRANSITION |     1 |       |     1   (0)|
    |   4 |   TABLE ACCESS BY INDEX ROWID           | WORKGROUP               |  1482 | 42978 |     1   (0)|
    |   5 |    INDEX UNIQUE SCAN                    | PK_WORKGROUP            |     1 |       |     0   (0)|
    |   6 |  SORT AGGREGATE                         |                         |     1 |    16 |            |
    |   7 |   TABLE ACCESS BY INDEX ROWID           | FAX_OFFER_DETAIL        |     1 |    16 |     5   (0)|
    |   8 |    INDEX RANGE SCAN                     | FAX_OFFER_DETAIL_IDX1   |     1 |       |     3   (0)|
    |   9 |  SORT AGGREGATE                         |                         |     1 |    16 |            |
    |  10 |   TABLE ACCESS BY INDEX ROWID           | FAX_OFFER_DETAIL        |     1 |    16 |     5   (0)|
    |  11 |    INDEX RANGE SCAN                     | FAX_OFFER_DETAIL_IDX1   |     1 |       |     3   (0)|
    |  12 |  SORT AGGREGATE                         |                         |     1 |    11 |            |
    |  13 |   TABLE ACCESS BY INDEX ROWID           | FAX_OFFER_DETAIL        |     1 |    11 |     5   (0)|
    |  14 |    INDEX RANGE SCAN                     | FAX_OFFER_DETAIL_IDX1   |     1 |       |     3   (0)|
    |  15 |  VIEW                                   |                         |     2 | 12092 | 88923   (1)|
    |  16 |   WINDOW SORT PUSHED RANK               |                         |     2 |  1378 | 88923   (1)|
    |  17 |    NESTED LOOPS                         |                         |       |       |            |
    |  18 |     NESTED LOOPS                        |                         |     2 |  1378 | 88920   (1)|
    |  19 |      NESTED LOOPS                       |                         | 18420 |    11M| 70490   (1)|
    |  20 |       HASH JOIN RIGHT SEMI              |                         |    69 |  3657 |    49   (3)|
    |  21 |        COLLECTION ITERATOR PICKLER FETCH| SPLITCLOB               |  8168 | 16336 |    29   (0)|
    |  22 |        TABLE ACCESS FULL                | FAX_SOURCE              |  2409 |   119K|    19   (0)|
    |  23 |       TABLE ACCESS BY INDEX ROWID       | FAX_HEADER              |   268 |   160K|  2854   (1)|
    |  24 |        INDEX RANGE SCAN                 | FAX_HEADER_FS_IDX       |  4345 |       |     7   (0)|
    |  25 |      INDEX RANGE SCAN                   | GLOBAL_BU_MAPPING_BUID  |     1 |       |     0   (0)|
    |  26 |       TABLE ACCESS BY INDEX ROWID       | WORKGROUP               |     1 |     8 |     2   (0)|
    |  27 |        INDEX UNIQUE SCAN                | PK_WORKGROUP            |     1 |       |     1   (0)|
    |  28 |     TABLE ACCESS BY INDEX ROWID         | GLOBAL_BU_MAPPING       |     1 |    24 |     1   (0)|
    Note
       - 'PLAN_TABLE' is old version
    Statistics
         894400  recursive calls
             60  db block gets
        7402741  consistent gets
              0  physical reads
              0  redo size
          46309  bytes sent via SQL*Net to client
            430  bytes received via SQL*Net from client
              8  SQL*Net roundtrips to/from client
         848304  sorts (memory)
              0  sorts (disk)
            100  rows processed[/code]
    Please help me.
    Thanks in advance.

  • Need to tune this query

    Hi
    I dont know anything about tuning
    can anybody help to tune this query
    SQL> set autotrace traceonly explain
    SQL> select count(*) from ibs_x_t_receipts c
      2  where exists                          
      3  (Select 1 from ibs_s_i_doc_receipt a,ibs_x_t_bill b
      4   where A.app_fr_doc_no = c.receipt_no
      5     and a.app_to_doc_no = b.doc_no
      6     and a.app_to_tr_type = 'TRN001'
      7     and A.app_fr_tr_type = 'TRN002'
      8     and b.bill_month <= '31-dec-2008'
      9     and b.balance_ser_amt = 0
    10     and b.balance_tax_amt = 0)
    11  /
    Execution Plan
       0      SELECT STATEMENT Optimizer=ALL_ROWS (Cost=212880 Card=1 Byte
              s=21)
       1    0   SORT (AGGREGATE)
       2    1     NESTED LOOPS (Cost=212880 Card=1 Bytes=21)
       3    2       VIEW OF 'VW_SQ_1' (VIEW) (Cost=212878 Card=1 Bytes=14)
       4    3         HASH (UNIQUE)
       5    4           NESTED LOOPS
       6    5             NESTED LOOPS (Cost=212878 Card=1 Bytes=66)
       7    6               VIEW OF 'index$_join$_002' (VIEW) (Cost=30021
              Card=91387 Bytes=3564093)
       8    7                 HASH JOIN
       9    8                   INDEX (RANGE SCAN) OF 'SIDOC_INDX1' (INDEX
              ) (Cost=171215 Card=91387 Bytes=3564093)
      10    8                   INDEX (RANGE SCAN) OF 'SIDOC_INDX2' (INDEX
              ) (Cost=366130 Card=91387 Bytes=3564093)
      11    6               INDEX (UNIQUE SCAN) OF 'ITL_PK2' (INDEX (UNIQU
              E)) (Cost=1 Card=1)
      12    5             TABLE ACCESS (BY INDEX ROWID) OF 'IBS_X_T_BILL'
              (TABLE) (Cost=2 Card=1 Bytes=27)
      13    2       INDEX (UNIQUE SCAN) OF 'RECEIPTS_PK2' (INDEX (UNIQUE))
               (Cost=1 Card=1 Bytes=7)it is running like anything, i didn't get the result.
    Please help me
    kanish

    --untested
    SELECT COUNT (*)
      FROM ibs_x_t_receipts c
    WHERE EXISTS (
              SELECT 1
                FROM ibs_s_i_doc_receipt a
               WHERE a.app_fr_doc_no = c.receipt_no
                 AND a.app_to_tr_type = 'TRN001'
                 AND a.app_fr_tr_type = 'TRN002'
                 AND EXISTS (
                        SELECT 1
                          FROM ibs_x_t_bill b
                         WHERE a.app_to_doc_no = b.doc_no
                           AND b.bill_month <= '31-dec-2008'
                           AND b.balance_ser_amt = 0
                           AND b.balance_tax_amt = 0))regards,
    friend
    Edited by: most wanted!!!! on Apr 17, 2012 3:51 AM

  • Need to tune insert query

    Hi,
    I'm using below query inside the procedure.I need to tune this query as it is taking more time for execution.Could you some help on this
    *version.*
    10.2.0
    Query
    INSERT INTO  TEMP_TEST_STAT(
                SELECT S.STUDENT_ID_PK, A.RESPONSE_KEY GENDER, B.RESPONSE_KEY ETHNICITY, T.SCORE SCALE_SCORE ,D.TEST_NAME
                FROM TEST_SESSION_DETAIL T, TEST_SESSION S, STUDENT U, TEST_DETAIL D,
                SELECT I.ITEM_ID, I.UIN, BG.BG_SESSION_DETAIL_ID, BG.RESPONSE_KEY , B.TEST_SESSION_ID, C.STUDENT_ID_PK
                FROM BG_QUESTION_USER_RESPONSE BG, ITEM I, BG_SESSION_DETAIL B, TEST_SESSION C
                WHERE
                BG.ITEM_ID = I.ITEM_ID AND I.UIN = 'SBG002' AND
                BG.BG_SESSION_DETAIL_ID = B.BG_SESSION_DETAIL_ID
                AND B.TEST_SESSION_ID = C.TEST_SESSION_ID ) A,
                SELECT I.ITEM_ID, I.UIN, BG.BG_SESSION_DETAIL_ID, BG.RESPONSE_KEY , B.TEST_SESSION_ID, C.STUDENT_ID_PK
                FROM BG_QUESTION_USER_RESPONSE BG, ITEM I, BG_SESSION_DETAIL B, TEST_SESSION C
                WHERE
                BG.ITEM_ID = I.ITEM_ID AND I.UIN = 'SBG001' AND
                BG.BG_SESSION_DETAIL_ID = B.BG_SESSION_DETAIL_ID
                AND B.TEST_SESSION_ID = C.TEST_SESSION_ID ) B
                ,INSTITUTION E
                WHERE
                D.TEST_NAME = 'Reading Comprehension' AND
                T.TEST_SESSION_STATUS_ID = 3
                AND TRUNC(T.TEST_END_DATE) BETWEEN TO_DATE('01-09-09','DD-MON-YY') AND TO_DATE('30-09-09','DD-MON-YY')
                AND T.TEST_DETAIL_ID = D.TEST_DETAIL_ID
                AND S.STUDENT_ID_PK = U.STUDENT_ID_PK
                AND S.TEST_SESSION_ID = T.TEST_SESSION_ID
                AND A.TEST_SESSION_ID = T.TEST_SESSION_ID
                AND A.STUDENT_ID_PK = S.STUDENT_ID_PK
                AND B.TEST_SESSION_ID = T.TEST_SESSION_ID
                AND B.STUDENT_ID_PK = S.STUDENT_ID_PK
                AND S.INSTITUTION_ID=E.INSTITUTION_ID
                AND SUBSTR(E.INSTITUTION_ID_DISPLAY,8,3) <> '000');
    Explain plan
    PLAN_TABLE_OUTPUT
    Plan hash value: 790379856
    | Id  | Operation                                      | Name                         | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
    |   0 | INSERT STATEMENT                               |                              |     1 |   204 |  1567   (1)| 00:00:19 |       |       |
    |*  1 |  FILTER                                        |                              |       |       |            |          |       |       |
    |   2 |   NESTED LOOPS                                 |                              |     1 |   204 |  1567   (1)| 00:00:19 |       |       |
    |   3 |    NESTED LOOPS                                |                              |     1 |   189 |  1566   (1)| 00:00:19 |       |       |
    |   4 |     NESTED LOOPS                               |                              |     1 |   167 |  1561   (1)| 00:00:19 |       |       |
    |   5 |      NESTED LOOPS                              |                              |     1 |   155 |  1560   (1)| 00:00:19 |       |       |
    |   6 |       NESTED LOOPS                             |                              |     1 |   143 |  1556   (1)| 00:00:19 |       |       |
    |   7 |        NESTED LOOPS                            |                              |     1 |   128 |  1555   (1)| 00:00:19 |       |       |
    |   8 |         NESTED LOOPS                           |                              |     1 |   106 |  1550   (1)| 00:00:19 |       |       |
    |   9 |          NESTED LOOPS                          |                              |   186 | 17484 |  1364   (1)| 00:00:17 |       |       |
    |* 10 |           HASH JOIN                            |                              |    86 |  7052 |  1020   (1)| 00:00:13 |       |       |
    |  11 |            NESTED LOOPS                        |                              |    86 |  5848 |  1002   (1)| 00:00:13 |       |       |
    |* 12 |             HASH JOIN                          |                              |    86 |  4472 |   916   (1)| 00:00:11 |       |       |
    |* 13 |              INDEX RANGE SCAN                  | TEST_DETAIL_AK_1             |     1 |    21 |     2   (0)| 00:00:01 |       |       |
    |* 14 |              TABLE ACCESS BY GLOBAL INDEX ROWID| TEST_SESSION_DETAIL          |  8549 |   258K|   914   (1)| 00:00:11 | ROWID | ROWID |
    |* 15 |               INDEX RANGE SCAN                 | TEST_END_DATE_IDX            | 15672 |       |    53   (0)| 00:00:01 |       |       |
    |  16 |             PARTITION HASH ITERATOR            |                              |     1 |    16 |     1   (0)| 00:00:01 |   KEY |   KEY |
    |  17 |              TABLE ACCESS BY LOCAL INDEX ROWID | TEST_SESSION                 |     1 |    16 |     1   (0)| 00:00:01 |   KEY |   KEY |
    |* 18 |               INDEX UNIQUE SCAN                | PK_TEST_SESSION              |     1 |       |     0   (0)| 00:00:01 |   KEY |   KEY |
    |* 19 |            INDEX FAST FULL SCAN                | INSTI_ID_NAME_COUN_DISP_IDX  |  5930 | 83020 |    17   (0)| 00:00:01 |       |       |
    |  20 |           TABLE ACCESS BY GLOBAL INDEX ROWID   | BG_SESSION_DETAIL            |     2 |    24 |     4   (0)| 00:00:01 | ROWID | ROWID |
    |* 21 |            INDEX RANGE SCAN                    | BG_SESS_DETAIL_TEST_SE_FK1_I |     2 |       |     2   (0)| 00:00:01 |       |       |
    |  22 |          PARTITION HASH ITERATOR               |                              |     1 |    12 |     1   (0)| 00:00:01 |   KEY |   KEY |
    |* 23 |           TABLE ACCESS BY LOCAL INDEX ROWID    | TEST_SESSION                 |     1 |    12 |     1   (0)| 00:00:01 |   KEY |   KEY |
    |* 24 |            INDEX UNIQUE SCAN                   | PK_TEST_SESSION              |     1 |       |     0   (0)| 00:00:01 |   KEY |   KEY |
    |  25 |         TABLE ACCESS BY GLOBAL INDEX ROWID     | BG_QUESTION_USER_RESPONSE    |     4 |    88 |     5   (0)| 00:00:01 | ROWID | ROWID |
    |* 26 |          INDEX RANGE SCAN                      | BG_QUESTION_USER_RESP_IDX1   |     4 |       |     2   (0)| 00:00:01 |       |       |
    |  27 |        PARTITION HASH ITERATOR                 |                              |     1 |    15 |     1   (0)| 00:00:01 |   KEY |   KEY |
    |* 28 |         TABLE ACCESS BY LOCAL INDEX ROWID      | ITEM                         |     1 |    15 |     1   (0)| 00:00:01 |   KEY |   KEY |
    |* 29 |          INDEX UNIQUE SCAN                     | PK_ITEM                      |     1 |       |     0   (0)| 00:00:01 |   KEY |   KEY |
    |  30 |       TABLE ACCESS BY GLOBAL INDEX ROWID       | BG_SESSION_DETAIL            |     2 |    24 |     4   (0)| 00:00:01 | ROWID | ROWID |
    |* 31 |        INDEX RANGE SCAN                        | BG_SESS_DETAIL_TEST_SE_FK1_I |     2 |       |     2   (0)| 00:00:01 |       |       |
    |  32 |      PARTITION HASH ITERATOR                   |                              |     1 |    12 |     1   (0)| 00:00:01 |   KEY |   KEY |
    |* 33 |       TABLE ACCESS BY LOCAL INDEX ROWID        | TEST_SESSION                 |     1 |    12 |     1   (0)| 00:00:01 |   KEY |   KEY |
    |* 34 |        INDEX UNIQUE SCAN                       | PK_TEST_SESSION              |     1 |       |     0   (0)| 00:00:01 |   KEY |   KEY |
    |  35 |     TABLE ACCESS BY GLOBAL INDEX ROWID         | BG_QUESTION_USER_RESPONSE    |     4 |    88 |     5   (0)| 00:00:01 | ROWID | ROWID |
    |* 36 |      INDEX RANGE SCAN                          | BG_QUESTION_USER_RESP_IDX1   |     4 |       |     2   (0)| 00:00:01 |       |       |
    |  37 |    PARTITION HASH ITERATOR                     |                              |     1 |    15 |     1   (0)| 00:00:01 |   KEY |   KEY |
    |* 38 |     TABLE ACCESS BY LOCAL INDEX ROWID          | ITEM                         |     1 |    15 |     1   (0)| 00:00:01 |   KEY |   KEY |
    |* 39 |      INDEX UNIQUE SCAN                         | PK_ITEM                      |     1 |       |     0   (0)| 00:00:01 |   KEY |   KEY |
    Predicate Information (identified by operation id):
       1 - filter(TO_DATE('01-09-09','DD-MON-YY')<=TO_DATE('30-09-09','DD-MON-YY'))
      10 - access("S"."INSTITUTION_ID"="E"."INSTITUTION_ID")
      12 - access("T"."TEST_DETAIL_ID"="D"."TEST_DETAIL_ID")
      13 - access("D"."TEST_NAME"='Reading Comprehension')
      14 - filter("T"."TEST_SESSION_STATUS_ID"=3)
      15 - access(TRUNC(INTERNAL_FUNCTION("TEST_END_DATE"))>=TO_DATE('01-09-09','DD-MON-YY') AND
                  TRUNC(INTERNAL_FUNCTION("TEST_END_DATE"))<=TO_DATE('30-09-09','DD-MON-YY'))
      18 - access("S"."TEST_SESSION_ID"="T"."TEST_SESSION_ID")
      19 - filter(SUBSTR("E"."INSTITUTION_ID_DISPLAY",8,3)<>'000')
      21 - access("B"."TEST_SESSION_ID"="T"."TEST_SESSION_ID")
      23 - filter("C"."STUDENT_ID_PK"="S"."STUDENT_ID_PK")
      24 - access("B"."TEST_SESSION_ID"="C"."TEST_SESSION_ID")
      26 - access("BG"."BG_SESSION_DETAIL_ID"="B"."BG_SESSION_DETAIL_ID")
      28 - filter("I"."UIN"='SBG001')
      29 - access("BG"."ITEM_ID"="I"."ITEM_ID")
      31 - access("B"."TEST_SESSION_ID"="T"."TEST_SESSION_ID")
      33 - filter("C"."STUDENT_ID_PK"="S"."STUDENT_ID_PK")
      34 - access("B"."TEST_SESSION_ID"="C"."TEST_SESSION_ID")
      36 - access("BG"."BG_SESSION_DETAIL_ID"="B"."BG_SESSION_DETAIL_ID")
      38 - filter("I"."UIN"='SBG002')
      39 - access("BG"."ITEM_ID"="I"."ITEM_ID")

    Rob,
    How i can my insert statement here.
    I tried like..but error.
    select /*+ gather_plan_statistics */  INSERT INTO  TEMP_TEST_STAT(
                SELECT S.STUDENT_ID_PK, A.RESPONSE_KEY GENDER, B.RESPONSE_KEY ETHNICITY, T.SCORE SCALE_SCORE ,D.TEST_NAME
                FROM TEST_SESSION_DETAIL T, TEST_SESSION S, STUDENT U, TEST_DETAIL D,
                SELECT I.ITEM_ID, I.UIN, BG.BG_SESSION_DETAIL_ID, BG.RESPONSE_KEY , B.TEST_SESSION_ID, C.STUDENT_ID_PK
                FROM BG_QUESTION_USER_RESPONSE BG, ITEM I, BG_SESSION_DETAIL B, TEST_SESSION C
                WHERE
                BG.ITEM_ID = I.ITEM_ID AND I.UIN = 'SBG002' AND
                BG.BG_SESSION_DETAIL_ID = B.BG_SESSION_DETAIL_ID
                AND B.TEST_SESSION_ID = C.TEST_SESSION_ID ) A,
                SELECT I.ITEM_ID, I.UIN, BG.BG_SESSION_DETAIL_ID, BG.RESPONSE_KEY , B.TEST_SESSION_ID, C.STUDENT_ID_PK
                FROM BG_QUESTION_USER_RESPONSE BG, ITEM I, BG_SESSION_DETAIL B, TEST_SESSION C
                WHERE
                BG.ITEM_ID = I.ITEM_ID AND I.UIN = 'SBG001' AND
                BG.BG_SESSION_DETAIL_ID = B.BG_SESSION_DETAIL_ID
                AND B.TEST_SESSION_ID = C.TEST_SESSION_ID ) B
                ,INSTITUTION E
                WHERE
                D.TEST_NAME = 'Reading Comprehension' AND
                T.TEST_SESSION_STATUS_ID = 3
                AND TRUNC(T.TEST_END_DATE) BETWEEN TO_DATE('01-09-09','DD-MON-YY') AND TO_DATE('30-09-09','DD-MON-YY')
                AND T.TEST_DETAIL_ID = D.TEST_DETAIL_ID
                AND S.STUDENT_ID_PK = U.STUDENT_ID_PK
                AND S.TEST_SESSION_ID = T.TEST_SESSION_ID
                AND A.TEST_SESSION_ID = T.TEST_SESSION_ID
                AND A.STUDENT_ID_PK = S.STUDENT_ID_PK
                AND B.TEST_SESSION_ID = T.TEST_SESSION_ID
                AND B.STUDENT_ID_PK = S.STUDENT_ID_PK
                AND S.INSTITUTION_ID=E.INSTITUTION_ID
                AND SUBSTR(E.INSTITUTION_ID_DISPLAY,8,3)  '000') from dual;please advice

  • How to tune the query and difference between CBO AND RBO.. Which is good

    Hello Friends,
    Here are some questions I have pls reply back with complete description and url if any ..
    1)How Did you tune Query,
    2)What approach you take to tune query? Do you use Hints?
    3)Where did you tune the query and what are the issue with query?
    4)What is difference between RBO and CBO? where u use RBO and CBO.
    5)Give some information about hash join?
    6) Using explain plan how do u know where the bottle neck in query .. how u will identify where the bottle neck is from explain plan .
    thanks/Kumar

    Hi,
    kumar73 wrote:
    Hello Friends,
    Here are some questions I have pls reply back with complete description and url if any ..
    1)How Did you tune Query, Use EXPLAIN PLAN to see exactly where it is spending its time, and address those areas.
    See the forum FAQ
    SQL and PL/SQL FAQ
    "3. How to improve the performance of my query?"
    2)What approach you take to tune query? Do you use Hints?Hints can help.
    Even more helpful is writing the SQL efficiently (avoiding multiple scans of the same table, filtering early, using built-in rather than user-defined functions, ...), creating and using indexes, and, for large tables, partitioning.
    Table design can have a big impact on performace.
    Look for ways to do part of what you need before the query. This includes denormalizing (when appropriate), the kind of pre-digesting that often takes place in data warehouses, function-based indexes, and, starting in Oracle 11, virtual columns.
    3)Where did you tune the query and what are the issue with query?Either this question is a vague summary of the entire thread, or I don't understand it. Can you re-phrase this part?
    4)What is difference between RBO and CBO? where u use RBO and CBO.Basically, use RBO if you have Oracle 7 or earlier.

  • Is there anything that can be done to tune this query?

    DB version:10gR2
    From AWR report, we have determined that the following SQL is taking most CPU Time. Is there anything that we can do to improve the performance of this query.
    We have an index on (stat_code,create_date_time) columns of ext_replenish table.
    SELECT EXT_REPLENISH.EXT_REPLENISH_ID, EXT_REPLENISH.EVENT_ID, EXT_REPLENISH.EVENT_KEY, EXT_REPLENISH.WHSE, EXT_REPLENISH.VALIDATE_KEY, EXT_REPLENISH.NBR_OF_RETRY, EXT_REPLENISH.STAT_CODE, EXT_REPLENISH.ERROR_SEQ_NBR, EXT_REPLENISH.CREATE_DATE_TIME, EXT_REPLENISH.MOD_DATE_TIME, EXT_REPLENISH.USER_ID, EXT_REPLENISH.CL_MESSAGE_ID, EXT_REPLENISH.SCHEMA_ID, EXT_REPLENISH.ELS_ACTVTY_CODE, EXT_REPLENISH.CD_MASTER_ID FROM EXT_REPLENISH WHERE ( ( ( ( ( EXT_REPLENISH.STAT_CODE = :1 ) OR ( EXT_REPLENISH.STAT_CODE = :2 ) ) OR ( ( ( EXT_REPLENISH.STAT_CODE = :3 ) AND ( EXT_REPLENISH.ERROR_SEQ_NBR >= :4 ) ) AND ( EXT_REPLENISH.ERROR_SEQ_NBR < :5 ) ) ) AND ( EXT_REPLENISH.MOD_DATE_TIME <= :6 ) ) AND ( EXT_REPLENISH.NBR_OF_RETRY < :7 ) ) AND ROWNUM <= 1 ORDER BY EXT_REPLENISH.STAT_CODE ASC, EXT_REPLENISH.CREATE_DATE_TIME ASC FOR UPDATE
    Is there anyway i could tune this query?
    note: Ignore the unnecessary brackets. They are system created(apparently by hibernate)
    Message was edited by:
    Nichols
    Taking off the pre tags due to readability issue(all words appear in single line )
    Message was edited by:
    Nichols

    From just blindly looking at this particular query, there doesn't seem any obvious reason why an index couldn't be extended to cover all the columns specified in the where clause.
    It might not help too much -> explain plan is required first really before blindly guessing.
    Obviously, there's no point having an order by and a rownum (unless you wanted to do the order by before the rownum in an outer select) - I assume this is just a Hibernatism.

Maybe you are looking for

  • Is it possible to install Sybase Unwired Workspace in a separate machine

    Hi all, I have been using Sybase Unwired Workspace that got installed as part of the SUP 1.5.2 installation. To scale it further I now need ONLY the Workspace part of SUP to be installed in a couple of other workstations for my team members. Idea is

  • INTERNET,APPWORLD,WIFI - ISSUES

    Hi All,  I have BB Curve 8520 Model.  Issue with device:  1 . 1ce when is disable the internet setting after using internet the next time i switch ON internet Data internet will not work unless i restart the device.  2. After updating the appworld to

  • I've updated flash to 16.0.0.305 and Firefox is still blocking it

    As above, really. I've made sure Firefox is the right version. I've updated Flash to .305 as shown in "about:addons," but it's still blocking. I've restarted my computer, with the restarting of firefox that that implies. All the questions I've seen i

  • Is there Any Terminal Command to Bring Icon, Doc, App & Window Size to Default

    Hi. Is there a kind of universal restore to default (as if it was freshly or cleanly installed) everything in the OS (icon size, dock size, placement or position, app window size default, etc.) either in terminal or some hidden restore to default but

  • Play a video in-app independently from in-app or extern music?

    Hi there, The app has in-app music which can be switched off by the user, e.g. if he rather listens to his own music. In the near future, tutorial-videos will be added to the app. These videos don't have and need any sound themselves. The problem is