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

Home -> Community -> Usenet -> c.d.o.server -> Re: unexpected merge cartesian join

Re: unexpected merge cartesian join

From: <nicola.farina_at_info-line.it>
Date: 1 Dec 2005 08:20:19 -0800
Message-ID: <1133454019.295879.283580@g43g2000cwa.googlegroups.com>


In the case someone would like to help I post also the autotrace output.
This is for the query version:

ilcorsi_at_NOVE> select *
  2 from v_filter_254
  3 where upper(f2227) like upper('%test%')   4 order by f520, f184, f32
  5 ;

Execution Plan


   0
SELECT STATEMENT Optimizer=CHOOSE (Cost=79 Card=83 Bytes=28635)

   1 0
  SORT (ORDER BY) (Cost=79 Card=83 Bytes=28635)

   2 1
    NESTED LOOPS (OUTER) (Cost=72 Card=83 Bytes=28635)

   3 2

      HASH JOIN (OUTER) (Cost=72 Card=83 Bytes=26975)

   4 3

        HASH JOIN (OUTER) (Cost=62 Card=83 Bytes=15770)

   5 4

          HASH JOIN (OUTER) (Cost=54 Card=83 Bytes=13446)

   6 5

            HASH JOIN (OUTER) (Cost=46 Card=83 Bytes=11205)

   7 6

              HASH JOIN (OUTER) (Cost=38 Card=83 Bytes=8964)

   8 7

                HASH JOIN (OUTER) (Cost=30 Card=83 Bytes=7802)


   9    8
                  TABLE ACCESS (FULL) OF 'A_CORSO' (Cost=7 Card=83
Bytes=3071)

  10 8

                  VIEW OF 'V_CORSI_SPESE_INT_BASE' (Cost=22 Card=195
Bytes=11115)

  11 10

                    SORT (GROUP BY) (Cost=22 Card=195 Bytes=10530)


  12   11
                      HASH JOIN (OUTER) (Cost=18 Card=195 Bytes=10530)


  13   12
                        TABLE ACCESS (BY INDEX ROWID) OF
'M_SPESE_CORSO'   14 13
                          NESTED LOOPS (Cost=10 Card=188 Bytes=7708)


  15   14
                            NESTED LOOPS (Cost=10 Card=1712
Bytes=34240)

  16 15

                              HASH JOIN (Cost=10 Card=1712 Bytes=25680)


  17   16
                                TABLE ACCESS (FULL) OF
'M_RIEPILOGO_ANNUALE' (Cost=2 Card=7 Bytes=42)

  18 16

                                TABLE ACCESS (FULL) OF 'A_CORSO'

(Cost=7 Card=2939 Bytes=26451)

  19 15

                              INDEX (UNIQUE SCAN) OF 'UI_A_CORSO_0'

(UNIQUE)
  20 14
                            INDEX (RANGE SCAN) OF 'I_M_SPESE_CORSO_0'

(NON-UNIQUE)
  21 12
                        TABLE ACCESS (FULL) OF 'M_VAL_INT' (Cost=7
Card=557 Bytes=7241)

  22 7

                TABLE ACCESS (FULL) OF 'A_CORSO' (Cost=7 Card=3300
Bytes=46200)

  23 6

              TABLE ACCESS (FULL) OF 'M_VAL_STR' (Cost=7 Card=1 Bytes=27)

  24 5

            TABLE ACCESS (FULL) OF 'M_VAL_STR' (Cost=7 Card=1 Bytes=27)

  25 4

          TABLE ACCESS (FULL) OF 'M_VAL_INT' (Cost=7 Card=2 Bytes=56)

  26 3

        VIEW OF 'V_DIPARTIMENTI' (Cost=9 Card=2 Bytes=270)

  27 26

          SORT (UNIQUE) (Cost=9 Card=2 Bytes=80)

  28 27

            UNION-ALL   29 28

              TABLE ACCESS (FULL) OF 'TAB_CDCF' (Cost=3 Card=1 Bytes=57)

  30 28

              TABLE ACCESS (FULL) OF 'T_DIPARTIMENTI_BUDGET' (Cost=2 Card=1 Bytes=23)

  31 2

      TABLE ACCESS (BY INDEX ROWID) OF 'T_AVANZAMENTO_CORSO'   32 31

        INDEX (UNIQUE SCAN) OF 'PK_T_AVANZAMENTO_CORSO' (UNIQUE) Statistics


        211  recursive calls
          0  db block gets
       3493  consistent gets
         16  physical reads
          0  redo size
       2602  bytes sent via SQL*Net to client
        499  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          3  sorts (memory)
          0  sorts (disk)
         12  rows processed

ilcorsi_at_NOVE> quit

And this one is the other version the one with the cartesian merge join

ilcorsi_at_NOVE> select ID,F184,X184,F520,F2227,F522,F32   2 from v_filter_254
  3 where upper(f2227) like upper('%test%')   4 order by f520, f184, f32;

12 rows selected.

Execution Plan


   0
SELECT STATEMENT Optimizer=CHOOSE (Cost=73 Card=83 Bytes=22908)

   1 0
  SORT (ORDER BY) (Cost=73 Card=83 Bytes=22908)

   2 1
    NESTED LOOPS (OUTER) (Cost=67 Card=83 Bytes=22908)

   3 2

      HASH JOIN (OUTER) (Cost=67 Card=83 Bytes=22659)

   4 3

        HASH JOIN (OUTER) (Cost=57 Card=83 Bytes=11454)

   5 4

          HASH JOIN (OUTER) (Cost=49 Card=83 Bytes=9130)

   6 5

            HASH JOIN (OUTER) (Cost=41 Card=83 Bytes=6889)

   7 6

              HASH JOIN (OUTER) (Cost=33 Card=83 Bytes=4648)

   8 7

                HASH JOIN (OUTER) (Cost=25 Card=83 Bytes=3486)


   9    8
                  TABLE ACCESS (FULL) OF 'A_CORSO' (Cost=7 Card=83
Bytes=3071)

  10 8

                  VIEW OF 'V_CORSI_SPESE_INT_BASE' (Cost=17 Card=195
Bytes=975)

  11 10

                    SORT (GROUP BY) (Cost=17 Card=195 Bytes=6240)


  12   11
                      HASH JOIN (OUTER) (Cost=14 Card=195 Bytes=6240)


  13   12
                        NESTED LOOPS (Cost=7 Card=188 Bytes=4324)


  14   13
                          MERGE JOIN (CARTESIAN) (Cost=7 Card=621456
Bytes=11186208)

  15 14

                            NESTED LOOPS (Cost=7 Card=1712 Bytes=22256)


  16   15
                              TABLE ACCESS (FULL) OF 'A_CORSO' (Cost=7
Card=2939 Bytes=26451)

  17 15

                              INDEX (UNIQUE SCAN) OF
'IU1_M_RIEPILOGO_ANNUALE' (UNIQUE)   18 14
                            BUFFER (SORT) (Cost=7 Card=363 Bytes=1815)


  19   18
                              INDEX (FULL SCAN) OF 'I_M_SPESE_CORSO_0'

(NON-UNIQUE)
  20 13
                          INDEX (UNIQUE SCAN) OF 'UI_A_CORSO_0'

(UNIQUE)
  21 12
                        INDEX (FAST FULL SCAN) OF 'U1_M_VAL_INT'

(UNIQUE) (Cost=6 Card=557 Bytes=5013)

  22 7

                TABLE ACCESS (FULL) OF 'A_CORSO' (Cost=7 Card=3300
Bytes=46200)

  23 6

              TABLE ACCESS (FULL) OF 'M_VAL_STR' (Cost=7 Card=1 Bytes=27)

  24 5

            TABLE ACCESS (FULL) OF 'M_VAL_STR' (Cost=7 Card=1 Bytes=27)

  25 4

          TABLE ACCESS (FULL) OF 'M_VAL_INT' (Cost=7 Card=2 Bytes=56)

  26 3

        VIEW OF 'V_DIPARTIMENTI' (Cost=9 Card=2 Bytes=270)

  27 26

          SORT (UNIQUE) (Cost=9 Card=2 Bytes=80)

  28 27

            UNION-ALL   29 28

              TABLE ACCESS (FULL) OF 'TAB_CDCF' (Cost=3 Card=1 Bytes=57)

  30 28

              TABLE ACCESS (FULL) OF 'T_DIPARTIMENTI_BUDGET' (Cost=2 Card=1 Bytes=23)

  31 2

      INDEX (UNIQUE SCAN) OF 'PK_T_AVANZAMENTO_CORSO' (UNIQUE) Statistics


       5167  recursive calls
          0  db block gets
    1062011  consistent gets
        286  physical reads
          0  redo size
       1926  bytes sent via SQL*Net to client
        499  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
        181  sorts (memory)
          0  sorts (disk)
         12  rows processed

ilcorsi_at_NOVE> spool off

And finally this is the tkprof output of the running query (the one with the cartesian merge)

Rows Row Source Operation

-------  ---------------------------------------------------
     12  SORT ORDER BY
     12   NESTED LOOPS OUTER
     12    HASH JOIN OUTER
     12     HASH JOIN OUTER
     12      HASH JOIN OUTER
     12       HASH JOIN OUTER
     12        NESTED LOOPS OUTER
     12         HASH JOIN OUTER
     12          TABLE ACCESS FULL OBJ#(1397027)
    167          VIEW
    167           SORT GROUP BY
    298            HASH JOIN OUTER
    298             NESTED LOOPS
1059960              MERGE JOIN CARTESIAN
   2920               NESTED LOOPS
   2939                TABLE ACCESS FULL OBJ#(1397027)
   2920                INDEX UNIQUE SCAN OBJ#(1374394) (object id
1374394)
1059960               BUFFER SORT
    363                INDEX FULL SCAN OBJ#(1374407) (object id
1374407)
    298              INDEX UNIQUE SCAN OBJ#(1754386) (object id
1754386)
    557             INDEX FAST FULL SCAN OBJ#(1374423) (object id
1374423)
     12         TABLE ACCESS BY INDEX ROWID OBJ#(1397027)
     12          INDEX UNIQUE SCAN OBJ#(1754386) (object id 1754386)
      4        TABLE ACCESS FULL OBJ#(1374428)
    286       TABLE ACCESS FULL OBJ#(1374428)
    553      TABLE ACCESS FULL OBJ#(1374421)
     21     VIEW
     21      SORT UNIQUE
     21       UNION-ALL
     20        TABLE ACCESS FULL OBJ#(1400837)
      1        TABLE ACCESS FULL OBJ#(1374473)
     12    INDEX UNIQUE SCAN OBJ#(1374458) (object id 1374458)

There is a cardinality quite higher (1059960) for the merge step than the expexted one (621456) at the step 14. I tried playing with the statistics of the underlying tables (removing the histogram on the indexed columns) and I got an extimated card much more similar to the actual but....
the merge join remains !
And it remains also my question
*why* using select * did not get the merge join and using select id ... get it ????? Received on Thu Dec 01 2005 - 10:20:19 CST

Original text of this message

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