Re: Is a better way to have the same result of this - Mailing list pgsql-performance

From Vernon Wu
Subject Re: Is a better way to have the same result of this
Date
Msg-id D09A008F9886MLMLC7XVYSBA2VFEVP.3defa421@kimiko
Whole thread Raw
In response to Re: Is a better way to have the same result of this  (Ron Johnson <ron.l.johnson@cox.net>)
Responses Re: Is a better way to have the same result of this
Re: Is a better way to have the same result of this
List pgsql-performance
Ron,

The gender is indexed. Each user has account and preference, but not necessary block.

I am currently seeking for query optimisation, not system configuration optimisation

12/4/2002 9:26:48 PM, Ron Johnson <ron.l.johnson@cox.net> wrote:

>On Wed, 2002-12-04 at 18:26, Vernon Wu wrote:
>> I have the following query:
>>
>> SELECT p.userid, p.year, a.country, a.province, a.city
>> FROM profile p, account a
>> WHERE p.userid=a.userid AND
>>     (p.year BETWEEN 1961 AND 1976) AND
>>     a.country='CA' AND
>>     a.province='BC' AND
>>     p.gender='f' AND
>>     p.userid NOT IN (SELECT b.userid FROM block b WHERE b.personid='Joe') AND
>>     block.userid IS NOT NULL AND
>>     p.userid IN
>>     (SELECT f.userid FROM preference f, profile p1 WHERE p1.userid='Joe' AND 2002-p1.year BETWEEN
>>     f.minage AND f.maxage)
>>
>> In plain English, it is that
>>
>> Joe finds females between the ages in the location who is not in the block table, while Joe's age is between what
they
>> prefer.
>>
>> The query plan is the followings:
>>
>> Nested Loop  (cost=0.00..127.12 rows=995 width=894)
>>   ->  Nested Loop  (cost=0.00..97.17 rows=1 width=894)
>>         ->  Seq Scan on account a  (cost=0.00..25.00 rows=1 width=289)
>>         ->  Index Scan using pk_profile on profile p  (cost=0.00..72.16 rows=1 width=605)
>>               SubPlan
>>                 ->  Materialize  (cost=22.50..22.50 rows=5 width=55)
>>                       ->  Seq Scan on block b  (cost=0.00..22.50 rows=5 width=55
>> )
>>                 ->  Materialize  (cost=44.82..44.82 rows=111 width=89)
>>                       ->  Nested Loop  (cost=0.00..44.82 rows=111 width=89)
>>                             ->  Index Scan using pk_profile on profile p1  (cost=0.00..4.82 rows=1 width=12)
>>                             ->  Seq Scan on preference f  (cost=0.00..20.00 rows=1000 width=77)
>>   ->  Seq Scan on block  (cost=0.00..20.00 rows=995 width=0)
>>
>> It seems take quite long to run this query. How to optimise the query?
>>
>> Thanks for your input.
>>
>> Vernon
>
>What kind of indexes, if any, do you have on, and what is the
>cardinality of account, block and preference?
>
>What version of Postgres are you using?
>
>How much shared memory and buffers are you using?
>
>--
>+------------------------------------------------------------+
>| Ron Johnson, Jr.     mailto:ron.l.johnson@cox.net          |
>| Jefferson, LA  USA   http://members.cox.net/ron.l.johnson  |
>|                                                            |
>| "they love our milk and honey, but preach about another    |
>|  way of living"                                            |
>|    Merle Haggard, "The Fighting Side Of Me"                |
>+------------------------------------------------------------+
>
>
>---------------------------(end of broadcast)---------------------------
>TIP 4: Don't 'kill -9' the postmaster
>




pgsql-performance by date:

Previous
From: Vernon Wu
Date:
Subject: Re: Is a better way to have the same result of this query?
Next
From: Tomasz Myrta
Date:
Subject: Re: Is a better way to have the same result of this