Rick Hillegas wrote:
> Depending on your data, the two queries could return different results,
> so Bryan's faster query is not a transformation which Derby would
> perform automatically. 

Oh yes! Although my data ensures that the subquery would return distinct 
results, Derby wouldn't know about it. Is there a way to say that the 
combination of two columns is unique?

When I tried to specify DISTINCT explicitly like this:
select name,version,release,time from PKG where PKG.id in (select DISTINCT 
PROVIDES.id from PROVIDES where (PROVIDES.name = ?))

...I didn't get any change in the performance figures. That is probably because 
of the "DISTINCT elimination in IN sub-queries" mentioned in "Tuning derby".

I would have thought that the DISTINCT is not redundant and actually allows for 
the transformation into a normal join.

> Nevertheless, it looks to me as though your
> original query almost qualifies for the EXISTS transformation documented
> in the Derby Tuning Guide. 

Why do you say "almost qualifies"; where is it not qualifying? And, will the 
EXISTS transformation speed up the query as much as the transformation to a 
normal join?

Thanks to all who have responded on this thread.

I have learnt not to trust the execution time of Statement.executeQuery(). It 
looks like the actual table access is made lazily (as and when the result set 
is accessed).

Reply via email to