Hi !

There is some tricks to change the way optimizer will choose the order of tables:

example:
select
   *
from
   LongTable L left join
   ShortTable S on (S.FieldA = L.FieldA)

The outer join would force the table on the left to be scaned first.

Another option is
select
   *
from
   LongTable L join
   ShortTable S on (S.FieldA = L.FieldA+0)

the +0 (or || '' if the field is a char/varchar) would prevent the optimizer to use the index on LongTable.FieldA and could lead to change the join order

see you !




Em 1/8/2014 18:09, Aldo Caruso aldo.car...@argencasas.com [firebird-support] escreveu:


Sean and Carlos,

  thanks for your answer.

Although the statistics are up to date the optimizer still chooses the shorter stream as the controller.

Nevertheless, I found a workaround using a subquery on the shorter table instead of a join.

This forced the optimizer to traverse the longer table first and boosts the performance even more than using an optimized query with a fixed plan.

    Thank you very much for your help.

Aldo


El 01/08/14 a las 16:01, 'Carlos H. Cantu' lis...@warmboot.com.br [firebird-support] escibiĆ³:

Are the indexes statistics up to date?

Also, post the query, query plan, and indexes stats.

Carlos
Firebird Performance in Detail - http://videos.firebirddevelopersday.com
www.firebirdnews.org - www.FireBase.com.br

ACacacfs> Hello,

ACacacfs> In a select statement there are two tables joined by a single
ACacacfs> matching field, with search conditions in both of them. One of them has
ACacacfs> roughly 130000 records, while the other has 600.

ACacacfs> Inspecting the plan generated by the optimizer, I realized that it ACacacfs> uses the shorter one as the controlling stream instead of the longer one
ACacacfs> (i.e. the shorter table is at the left side).

ACacacfs> Using a PLAN expression with the corresponding indexes to bypass ACacacfs> the plan deviced by the optimizer in order to switch the order of the ACacacfs> streams, the performance is boosted (nearly three times faster).

ACacacfs> What can cause the optimizer to pick a shorter table as the
ACacacfs> controlling stream ?

ACacacfs> Is there a workaround to induce the optimizer to select the streams ACacacfs> in a fixed way or should I have to resort to a manually imposed PLAN ?

ACacacfs> Thanks,
ACacacfs> Aldo




  • [fire... Aldo Caruso aldo.car...@argencasas.com [firebird-support]
    • ... 'Leyne, Sean' s...@broadviewsoftware.com [firebird-support]
    • ... 'Carlos H. Cantu' lis...@warmboot.com.br [firebird-support]
      • ... Aldo Caruso aldo.car...@argencasas.com [firebird-support]
        • ... Alexandre Benson Smith ibl...@thorsoftware.com.br [firebird-support]
          • ... Aldo Caruso aldo.car...@argencasas.com [firebird-support]

Reply via email to