Forum Moderators: coopster
SELECT DISTINCT * FROM (SELECT title,line1,line2,displayurl,actualurl,campaign.campid,maxbid FROM secmembers,geomembers,campaign,textcreatives,adusers WHERE secmembers.campid =campaign.campid AND geomembers.campid=campaign.campid AND campaign.campid=textcreatives.campid AND textcreatives.active IS TRUE AND adusers.balance>0 AND geomembers.state LIKE 'AL' AND geomembers.city IS NULL AND category = '3' AND subcategory IS NULL ORDER BY RANDOM()) AS subselect ORDER BY maxbid LIMIT 1
EXPLAIN gives:
QUERY PLAN
Limit (cost=7.18..7.20 rows=1 width=165)
-> Unique (cost=7.18..7.20 rows=1 width=165)
-> Sort (cost=7.18..7.18 rows=1 width=165)
Sort Key: maxbid, title, line1, line2, displayurl, actualurl, campid
-> Subquery Scan subselect (cost=7.16..7.17 rows=1 width=165)
-> Sort (cost=7.16..7.17 rows=1 width=165)
Sort Key: random()
-> Nested Loop (cost=0.00..7.15 rows=1 width=165)
-> Nested Loop (cost=0.00..5.08 rows=1 width=165)
Join Filter: ("inner".campid = "outer".campid)
-> Nested Loop (cost=0.00..4.06 rows=1 width=16)
Join Filter: ("outer".campid = "inner".campid)
-> Nested Loop (cost=0.00..2.04 rows=1 width=8)
Join Filter: ("inner".campid = "outer".campid)
-> Seq Scan on secmembers (cost=0.00..1.01 rows=1 width=4)
Filter: ((category = 3) AND (subcategory IS NULL))
-> Seq Scan on geomembers (cost=0.00..1.01 rows=1 width=4)
Filter: ((state ~~ 'AL'::text) AND (city IS NULL))
-> Seq Scan on campaign (cost=0.00..2.01 rows=1 width=8)
-> Seq Scan on textcreatives (cost=0.00..1.01 rows=1 width=149)
Filter: (active IS TRUE)
-> Seq Scan on adusers (cost=0.00..2.06 rows=1 width=0)
Filter: (balance > 0)
Can anyone tell me what will speed this up?