Received: from maia.hub.org (unknown [200.46.204.183]) by mail.postgresql.org (Postfix) with ESMTP id 8965B632A15 for ; Wed, 10 Mar 2010 06:11:38 -0400 (AST) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 89834-09 for ; Wed, 10 Mar 2010 10:11:16 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from ey-out-2122.google.com (ey-out-2122.google.com [74.125.78.26]) by mail.postgresql.org (Postfix) with ESMTP id E38CC635730 for ; Wed, 10 Mar 2010 06:11:15 -0400 (AST) Received: by ey-out-2122.google.com with SMTP id 9so816432eyd.33 for ; Wed, 10 Mar 2010 02:11:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:cc:subject:references:in-reply-to :content-type:content-transfer-encoding; bh=Km0TJlorYJd1TbrNoP0OtCNOXL/YRQIEZn5uLzruwos=; b=o76fbKk4q01pZEhOELgH9yQvyr7tFMXlYevwGivJP794IBctcnosJbGiC7PFvAWl3j ITCiDsnu1oQ1fMTOOfw9motmqk9vV9xhdYvamJcLAZpFHOeMeffglWrgPkefWTexkLIM RlF4UT4vuAKE5haDqC/A80f3pfxQKRqI3oqTI= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; b=YY6+GQ4XkuYq3hqVpo2Jp7R4WDH/s9OIpi07J7QRSPEvhCwNgNJh+sH7oJMxfDOS83 F/Jfw0yeFhPG2yB2/jcfFNb23/zbiRdOUStjwKCGhuT3jdP2SwqMD3l+SnIyO83Qdi9m NiXOcczoRk3Jcyo0VfBCiSmbKhIjYb+p3u6mY= Received: by 10.213.67.141 with SMTP id r13mr712952ebi.93.1268215874288; Wed, 10 Mar 2010 02:11:14 -0800 (PST) Received: from [0.0.0.0] (5357DA75.cable.casema.nl [83.87.218.117]) by mx.google.com with ESMTPS id 14sm3735265ewy.10.2010.03.10.02.11.13 (version=TLSv1/SSLv3 cipher=RC4-MD5); Wed, 10 Mar 2010 02:11:13 -0800 (PST) Message-ID: <4B977045.6040604@gmail.com> Date: Wed, 10 Mar 2010 11:11:17 +0100 From: Yeb Havinga User-Agent: Thunderbird 2.0.0.23 (Windows/20090812) MIME-Version: 1.0 To: sverhagen@wps-nl.com CC: pgsql-performance@postgresql.org Subject: Re: Strange workaround for slow query References: <4B976229.7030407@gmail.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=-0.185 tagged_above=-10 required=5 tests=BAYES_40=-0.185 X-Spam-Level: X-Archive-Number: 201003/105 X-Sequence-Number: 37930 sverhagen@wps-nl.com wrote: > > Hi, > > > EXPLAIN SELECT * FROM events_events LEFT OUTER JOIN events_event_types ON > eventType_id=events_event_types.id WHERE severity=20 AND (eventType_id > IN (71)) ORDER BY datetime DESC limit 50; > QUERY PLAN > ------------------------------------------------------------------------------------------------------------------------------------------- > Limit (cost=3.23..200.31 rows=50 width=131) > -> Nested Loop (cost=3.23..49139.16 rows=12466 width=131) > -> Index Scan Backward using events_events_eventtype_id_datetime_ind > on events_events (cost=0.00..48886.61 rows=12466 width=93) > Index Cond: (eventtype_id = 71) > -> Materialize (cost=3.23..3.24 rows=1 width=38) > -> Seq Scan on events_event_types (cost=0.00..3.23 rows=1 width=38) > Filter: ((id = 71) AND (severity = 20)) > > > EXPLAIN SELECT * FROM events_events LEFT OUTER JOIN events_event_types ON > eventType_id=events_event_types.id WHERE severity=70 AND (eventType_id > IN (71, 999)) ORDER BY datetime DESC LIMIT 50; > QUERY PLAN > ------------------------------------------------------------------------------------------------------------------------------------------------------------ > Limit (cost=27290.24..27290.37 rows=50 width=131) > -> Sort (cost=27290.24..27303.15 rows=5164 width=131) > Sort Key: events_events.datetime > -> Nested Loop (cost=22.95..27118.70 rows=5164 width=131) > -> Seq Scan on events_event_types (cost=0.00..3.02 rows=17 width=38) > Filter: (severity = 70) > -> Bitmap Heap Scan on events_events (cost=22.95..1589.94 rows=408 > width=93) > Recheck Cond: ((events_events.eventtype_id = ANY > ('{71,999}'::bigint[])) AND (events_events.eventtype_id = > events_event_types.id)) > -> Bitmap Index Scan on test_events_events_eventtype_id_severity_ind > (cost=0.00..22.85 rows=408 width=0) > Index Cond: ((events_events.eventtype_id = ANY ('{71,999}'::bigint[])) > AND (events_events.eventtype_id = events_event_types.id)) > Thanks - I'm sorry that I was not more specific earlier, but what would be *really* helpful is the output of explain analyze, since that also shows actual time, # rows and # loops of the inner nestloop. I'm wondering though why you do a left outer join. From the \d output in the previous mail, events_event.eventtype_id has a not null constraint and a fk to events_event_types.id, so an inner join would be appropriate. Outer joins limits the amount of join orders the planner considers, so a better plan might arise when the join is changed to inner. regards Yeb Havinga