Re: [SQL] Joining bug????

From: David Hartwig <daveh(at)insightdist(dot)com>
To: pierre(at)desertmoon(dot)com
Cc: pgsql-sql(at)postgreSQL(dot)org
Subject: Re: [SQL] Joining bug????
Date: 1998-10-27 18:40:53
Message-ID: 363613B5.B42316CC@insightdist.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

I would try the following indices:

prod - (prod_id)
pos - (pos_os_id, pos_prod_id)
pcat: - (pcat_prod_id, pcat_cat_id)
pkey - ( pkey_keyword, pkey_prod_id)

Various permutations of order may also effect the outcome.

pierre(at)desertmoon(dot)com wrote:

> >
> >
> >
> > pierre wrote:
> >
> > > I've been attempting to get my DB tuned to handle joins as best as
> > > possible. However, no matter which way I try to perform the joins, if I
> > > attempt to join more than two or three tables the joins becomes
> > > unbearably long not matter how many indexes I create in however many ways.
> > >
> > > My only solution was to create a hybrid table that contains the join of
> > > all of the tables I'm searching on with multi-keyed indexes. This is a
> > > VERY kludgy solution that makes changing the keys to my DB hard to change.
> > >
> > > IS there a problem with postgresql in performing joins? Is there a fix?
> > > What gives?
> >
> > There are many reasons for a query to take more time than expected.
> > PostgreSQL can do reasonably well joining many tables. It is impossible for
> > anyone to even guess without more specifics.
> >
> > Try submitting the specific query and the result of an EXPLAIN.
> > Example:
> > EXPLAIN SELECT foo FROM bar;
> >
> > Table sizes, indices, and time elapsed are also helpful.
>
> This query takes about 30seconds...way too long for my needs...I've got
> the query down to 2-5 seconds by using a hybrid table that is the join
> between the pos and pcat tables. All _id fields are indexed, as is the
> keyword field.
>
> explain select p.prod_name from prod p, pos o, pcat c, pkey k
> where p.prod_id = o.pos_prod_id and
> o.pos_os_id = 2 and
> o.pos_prod_id = c.pcat_prod_id and
> c.pcat_cat_id = 6 and
> c.pcat_prod_id = k.pkey_prod_id and
> k.pkey_keyword = 'photoshop';
> NOTICE: QUERY PLAN:
>
> Nested Loop (cost=8.10 size=2 width=28)
> -> Nested Loop (cost=6.05 size=1 width=12)
> -> Nested Loop (cost=4.05 size=1 width=8)
> -> Index Scan on o (cost=2.05 size=1 width=4)
> -> Index Scan on c (cost=2.00 size=2 width=4)
> -> Index Scan on k (cost=2.00 size=2 width=4)
> -> Index Scan on p (cost=2.05 size=85442 width=16)
>
> select count(*) from prod;
> EXPLAIN
> count
> -----
> 85443
> (1 row)
>
> select count(*) from pos;
> count
> ------
> 132564
> (1 row)
>
> select count(*) from pcat;
> count
> ------
> 337251
> (1 row)
>
> select count(*) from pkey;
> count
> ------
> 492550
> (1 row)
>
> EOF
> >
> > BTW, in case you don't know, the "VACUUM ANALYZE" statement need to be run
> > occasionally to facilitate the query planner.
> >
>
> All data is newley imported and indexed. So I shouldn't have to perform
> this. This web site that is using this DB is still in debug mode.
>
> Thanks for taking a look.
>
> -=pierre

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message pierre 1998-10-27 19:04:56 Re: [SQL] Joining bug????
Previous Message David Hartwig 1998-10-27 18:21:09 Re: [SQL] Joining bug????