Hugo Ferreira wrote:
> Hi everyone,
> 
> I seem to be having a problem here with LEFT JOINS between tables and
> results of INNER JOINS. Take for example the following example (table
> definition is in the end):
> 
> TABLE COUNT esparqueologico: 750
> TABLE COUNT data: 3828
> TABLE COUNT reftemporal: 3972
> 
> This query would take 6.7s to run (750 rows):
> 
> select * from esparqueologico oe left join
>   (data d cross join reftemporal r on d.reftemporal_id = r.id) x
> on oe.datacao_id = x.id
> 
> However this takes virtually zero time (750 rows):
> 
> select * from esparqueologico oe left join data d on oe.datacao_id = d.id
> 
> And this takes 0.1s (3828 rows):
> 
> select * from data d inner join reftemporal r on d.reftemporal_id = r.id
> 
> It seems to me that indexes are lost in the first query. Here is the data
> definition I'm using:
> 
> CREATE TABLE data (
>     id guid NOT NULL,
>     reftemporal_id guid NOT NULL,
>     PRIMARY KEY (id),
>     FOREIGN KEY (reftemporal_id) REFERENCES reftemporal(id),
> )
> 
> CREATE TABLE reftemporal (
>     id guid NOT NULL,
>     subtype varchar,
>     PRIMARY KEY (id)
> )
> 
> CREATE TABLE esparqueologico (
>     id guid NOT NULL,
>     datacao_id guid,
>     PRIMARY KEY (id),
>     FOREIGN KEY (datacao_id) REFERENCES data(id),
> )
> 
> CREATE INDEX idx_data_reftemporal_id ON data(reftemporal_id)
> CREATE INDEX idx_esparqueologico_datacao_id ON esparqueologico(datacao_id)

I'm not an expert, but don't you want an index on reftemporal.id as
well? You're querying it in your JOIN clause, but there's no index
on the field.

-- 
Scott Baker - Canby Telcom
RHCE - System Administrator - 503.266.8253

-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to