Hi

I'm trying to convert subquery.sql to junit and found this comment on the
original test :

-- DERBY-1007: Optimizer for subqueries can return incorrect cost estimates
-- leading to sub-optimal join orders for the outer query.  Before the patch
-- for that isssue, the following query plan will show T3 first and then
T1--
-- but that's determined by the optimizer to be the "bad" join order.  After
-- the fix, the join order will show T1 first, then T3, which is correct
-- (based on the optimizer's estimates).
And I ran the values SYSCS_UTIL.SYSCS_GET_RUNTIMESTATISTICS();
And the plan returned was

Statement Name:
   null
Statement Text:
    select x1.j, x2.b from (select distinct i,j from t1) x1, (select
distinct a,b from t3) x2 where x1.i = x2.a order by x1.j, x2.b
Parse Time: 0
Bind Time: 0
Optimize Time: 0
Generate Time: 0
Compile Time: 0
Execute Time: 0
Begin Compilation Timestamp : null
End Compilation Timestamp : null
Begin Execution Timestamp : null
End Execution Timestamp : null
Statement Execution Plan Text:
Sort ResultSet:
Number of opens = 1
Rows input = 4
Rows returned = 4
Eliminate duplicates = false
In sorted order = false
Sort information:
   Number of rows input=4
   Number of rows output=4
   Sort type=internal
   constructor time (milliseconds) = 0
   open time (milliseconds) = 0
   next time (milliseconds) = 0
   close time (milliseconds) = 0
   optimizer estimated row count:          130.00
   optimizer estimated cost:          330.98
Source result set:
   Project-Restrict ResultSet (5):
   Number of opens = 1
   Rows seen = 4
   Rows filtered = 0
   restriction = false
   projection = true
       constructor time (milliseconds) = 0
       open time (milliseconds) = 0
       next time (milliseconds) = 0
       close time (milliseconds) = 0
       restriction time (milliseconds) = 0
       projection time (milliseconds) = 0
       optimizer estimated row count:          130.00
       optimizer estimated cost:          330.98
   Source result set:
       Hash Join ResultSet:
       Number of opens = 1
       Rows seen from the left = 5
       Rows seen from the right = 4
       Rows filtered = 0
       Rows returned = 4
           constructor time (milliseconds) = 0
           open time (milliseconds) = 0
           next time (milliseconds) = 0
           close time (milliseconds) = 0
           optimizer estimated row count:          130.00
           optimizer estimated cost:          330.98
       Left result set:
           Distinct Scan ResultSet for T1 at read committed isolation level
using instantaneous share row locking:
           Number of opens = 1
           Hash table size = 5
           Distinct columns are column numbers (0,1)
           Rows seen = 5
           Rows filtered = 0
               constructor time (milliseconds) = 0
               open time (milliseconds) = 0
               next time (milliseconds) = 0
               close time (milliseconds) = 0
               optimizer estimated row count:           10.00
               optimizer estimated cost:           35.34
               next time in milliseconds/row = 0
           scan information:
               Bit set of columns fetched=All
               Number of columns fetched=2
               Number of pages visited=1
               Number of rows qualified=5
               Number of rows visited=5
               Scan type=heap
               start position:
null               stop position:
null               scan qualifiers:
None
               next qualifiers:
None
               optimizer estimated row count:           10.00
               optimizer estimated cost:           35.34
       Right result set:
           Hash Table ResultSet (4):
           Number of opens = 5
           Hash table size = 9
           Hash key is column number 0
           Rows seen = 9
           Rows filtered = 0
               constructor time (milliseconds) = 0
               open time (milliseconds) = 0
               next time (milliseconds) = 0
               close time (milliseconds) = 0
               optimizer estimated row count:           13.00
               optimizer estimated cost:          295.64
               next time in milliseconds/row = 0
               next qualifiers:
Column[0][0] Id: 0
Operator: =
Ordered nulls: false
Unknown return value: false
Negate comparison result: false
           Source result set:
               Distinct Scan ResultSet for T3 at read committed isolation
level using instantaneous share row locking:
               Number of opens = 1
               Hash table size = 9
               Distinct columns are column numbers (0,1)
               Rows seen = 9
               Rows filtered = 0
                   constructor time (milliseconds) = 0
                   open time (milliseconds) = 0
                   next time (milliseconds) = 0
                   close time (milliseconds) = 0
                   optimizer estimated row count:           13.00
                   optimizer estimated cost:          295.64
                   next time in milliseconds/row = 0
               scan information:
                   Bit set of columns fetched=All
                   Number of columns fetched=2
                   Number of pages visited=1
                   Number of rows qualified=9
                   Number of rows visited=9
                   Scan type=heap
                   start position:
null                   stop position:
null                   scan qualifiers:
None
                   next qualifiers:
None
                   optimizer estimated row count:           13.00
                   optimizer estimated cost:          295.64


My question is how do I find the join order from this plan? How should I do
an assert statement with this plan??

Thanks in advance for your help

Manjula

-- 
Thanks,
Manjula.

Reply via email to