You could try an outer join ... mucky in the extreme but it sometimes 
forces the optimiser to look at the sane table first ... (yes I know one 
shouldn't have to do that sort of thing).

On 03/02/2015 12:17, Fulvio Senore [email protected] [firebird-support] 
wrote:
> I have a database containing(simplifyinga little) a CUSTOMERS table
> andan INVOICES table.
> INVOICES contains a foreign key to CUSTOMERS, as you can expect.
>
> I want to retrieve rows showing INVOICES data and some CUSTOMERS data so
> I use an inner join, and I want to see newer invoices first so I add an
> ORDER BY clause. I only need a few rowssince I will show only the latest
> invoices in a grid.
> The query is something like
>
> SELECT INVOICES.*, CUSTOMERS.NAME
> FROM INVOICES INNER JOIN CUSTOMERS ON INVOICES.CUSTOMER_ID =
> CUSTOMERS.CUSTOMER_ID
> ORDER BY INVOICES.YEAR DESC, INVOICES.NUMBER DESC
>
> I have created a descending index on INVOICES.YEAR, INVOICES.NUMBER
>
> The problem is that if the tables are large the query is rather slow.
> Looking at the plan I see:
>
> PLAN SORT (JOIN (CUSTOMERS NATURAL, INVOICES INDEX (FK_INVOICES_CUSTOMERS)))
>
> so the database loads all rows and then it sorts them.Of course it is slow.
>
>
> If I test a query like
>
> SELECT * FROM INVOICES
> ORDER BY INVOICES.YEAR DESC, INVOICES.NUMBER DESC
>
> the plan is
>
> PLAN (INVOICESORDER IDX_INVOICES_DESC)
>
> and the query is much faster since it uses the index and it only reads a
> few rows.
>
>
> So it looks like if there is an inner join the optimizer does not use
> the descending index on INVOICES to speed up things.
>
>
> Is there a way to force the optimizer to use the descending index
> instead of sorting all the resulting rows?
> I am using Firebird 2.1 on Windows.
>
> Thanks in advance.
>
> Fulvio Senore

-- 
Tim Ward



------------------------------------

------------------------------------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Visit http://www.firebirdsql.org and click the Documentation item
on the main (top) menu.  Try FAQ and other links from the left-side menu there.

Also search the knowledgebases at http://www.ibphoenix.com/resources/documents/ 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
------------------------------------

Yahoo Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/firebird-support/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/firebird-support/join
    (Yahoo! ID required)

<*> To change settings via email:
    [email protected] 
    [email protected]

<*> To unsubscribe from this group, send an email to:
    [email protected]

<*> Your use of Yahoo Groups is subject to:
    https://info.yahoo.com/legal/us/yahoo/utos/terms/

Reply via email to