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.