21.08.2015 10:26, 'Louis van Alphen' wrote:

> Dmitry, if I then understand you correctly, if a view contains an outer join, 
> then FB will table scan? Is this documented somewhere so that I can read up?

It depends on a number of factors, but generally your conclusion is 
correct. The problem is that the join order always starts with a view 
with a joined table coming afterwards.

This is a known issue, but unfortunately hard to fix.

> Sure, I look at the plan, but the plan is after the fact. It does not show 
> you why?

Right, you cannot see why the optimizer does this or that choice, you 
see only the resulting plan.

> Something like:
>
> select S.*
> from COLLECTION_ COLL
> left join SKIN S on S.ID = COLL.SKIN_ID
> where S.ID is not null
>
> i.e. fake the left join to get the correct join order
> (COLLECTION_->SKIN_->COLOUR_).
>
> Not sure what you are doing here and what the where clause does. Are these 
> tricks documented somewhere?

This is a quite common trick. For inner joins, possible join orders are 
either {COLL->SKIN} or {SKIN->COLL}. We want the join order to be 
{COLL->SKIN} but the optimizer decides differently and chooses 
{SKIN->COLL}. For outer joins, however, the join order is always 
predefined and dictated by the join syntax. So we replace inner join 
with left join to guarantee the desired join order {COLL->SKIN}. But we 
need to exclude the "false" rows produced by the outer join (records 
from COLL having no matches in SKIN), so we add a WHERE clause -- S.ID 
is not null -- to remove those unnecessary rows (I assume S.ID is a 
primary key and thus it should never be NULL unless produced by the left 
join).


Dmitry


  • [firebird-s... 'Louis van Alphen' lo...@nucleo.co.za [firebird-support]
    • [fireb... Dmitry Yemanov dim...@users.sourceforge.net [firebird-support]
      • RE... 'Louis van Alphen' lo...@nucleo.co.za [firebird-support]
        • ... Dmitry Yemanov dim...@users.sourceforge.net [firebird-support]
          • ... 'Louis van Alphen' lo...@nucleo.co.za [firebird-support]
            • ... Dmitry Yemanov dim...@users.sourceforge.net [firebird-support]
              • ... 'Louis van Alphen' lo...@nucleo.co.za [firebird-support]
                • ... Dmitry Yemanov dim...@users.sourceforge.net [firebird-support]
                • ... 'Louis van Alphen' lo...@nucleo.co.za [firebird-support]
                • ... Dmitry Yemanov dim...@users.sourceforge.net [firebird-support]
                • ... 'Louis van Alphen' lo...@nucleo.co.za [firebird-support]
      • [f... setysvar setys...@gmail.com [firebird-support]

Reply via email to