db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Satheesh Bandaram (JIRA)" <derby-...@db.apache.org>
Subject [jira] Commented: (DERBY-781) Materialize union subqueries in select list where possible to avoid creating invariant resultsets many times.
Date Wed, 04 Jan 2006 20:21:02 GMT
    [ http://issues.apache.org/jira/browse/DERBY-781?page=comments#action_12361785 ] 

Satheesh Bandaram commented on DERBY-781:

Thanks Jeff for your analysis. I was just getting ready to file another improvement request
to make this optimization more generic. (not specific to unions) I have seen huge improvements
in two different customer situations. For the situation I filed the defect, each of the views
(V1 and V2) had 36 tables each and by materializing the inner view into a temp. table, I noticed
speed up from 70-150 seconds to under 3 seconds. (including the cost of creating temp. table)

I also saw another situation later without unions where materializing some table subqueries
improved performance by couple of orders of magnitude. So you are right... this optimization
can be applied to other cases too. 

I think materialization with or without hash joins should be useful. In both situations, creating
temp. table that materialized derived tables improved so much. You are right that the optimization
should be done inside the optimizer.

> Materialize union subqueries in select list where possible to avoid creating invariant
resultsets many times.
> -------------------------------------------------------------------------------------------------------------
>          Key: DERBY-781
>          URL: http://issues.apache.org/jira/browse/DERBY-781
>      Project: Derby
>         Type: Improvement
>   Components: SQL
>     Versions:,
>  Environment: generic
>     Reporter: Satheesh Bandaram

> Derby's handling of union subqueries in from list can be improved by materializing invariant
resultsets once, rather than creating them many times.
> For example:
> create view V1 as select i, j from T1 union select i,j from T2;
> create view V2 as select a,b from T3 union select a,b from T4;
> insert into T1 values (1,1), (2,2), (3,3), (4,4), (5,5);
> For a query like select * from V1, V2 where V1.j = V2.b and V1.i in (1,2,3,4,5), it is
possible the resultset for V2 is created 5 times. (assuming V2 is choosen as the the inner
table) This can be very costly if the underlying selects can take long time and also may perform
union many times.
> Enhance materialization logic in setOperatorNode.java. It currently returns FALSE always.
> public boolean performMaterialization(JBitSet outerTables)
> 		throws StandardException
> {
> 	// RESOLVE - just say no to materialization right now - should be a cost based decision
> 	return false;
> 	/* Actual materialization, if appropriate, will be placed by our parent PRN.
> 	 * This is because PRN might have a join condition to apply.  (Materialization
> 	 * can only occur before that.
> 	 */
> 	//return true;
> } 

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:

View raw message