How to optimize this query ? - Mailing list pgsql-sql

From proghome@silesky.com (krystoffff)
Subject How to optimize this query ?
Date
Msg-id 85898f7e.0308121021.4c66aae5@posting.google.com
Whole thread Raw
Responses Re: How to optimize this query ?  (Stephan Szabo <sszabo@megazone.bigpanda.com>)
Re: How to optimize this query ?  ("Franco Bruno Borghesi" <franco@akyasociados.com.ar>)
List pgsql-sql
Hi all

I have to optmize this query, because it takes a while to run (about
30s)

Here are the tables (with the keys):affiliate_lockout  (6 rows)  (member_id, affiliate_id)lead   (4490 rows)
(id,...)member  (6 rows)             (id, ...)member_exclusion (3 rows)    (member_id, member_id_to_exclude)purchase
(10000rows)        (lead_id, member_id, ...)
 


Here is the query:
SELECT *
FROM lead
WHERE 
(exclusive IS NULL OR (exclusive = 0 AND nb_purchases < 3)) AND 

id NOT IN (

SELECT lead_id
FROM purchase
WHERE member_id = 21101
) AND affiliate_id NOT 
IN (

SELECT affiliate_locked_id
FROM affiliate_lockout
WHERE member_id = 21101
) AND id NOT 
IN (

SELECT lead_id
FROM purchase
INNER JOIN member_exclusion
WHERE purchase.member_id = member_exclusion.member_id_to_exclude AND
purchase.member_id = 21101
)


I wonder the problem is with the subqueries (which are apparently very
slow to run, according to what I read), but I can't figure how to
rewrite this query without any subquery ...

Maybe the problem comes from the index ... How would you create your
indexes to optimize this query ?

Could somebody help me ?
Thanks
krystoffff


pgsql-sql by date:

Previous
From: "Vernon Smith"
Date:
Subject: Re: INSERT INTO ... SELECT
Next
From: Stephan Szabo
Date:
Subject: Re: How to optimize this query ?