Received: from maia.hub.org (unknown [200.46.208.211]) by mail.postgresql.org (Postfix) with ESMTP id A206F6327F7 for ; Fri, 23 Apr 2010 01:14:02 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.208.211]) (amavisd-maia, port 10024) with ESMTP id 63073-10 for ; Fri, 23 Apr 2010 04:13:42 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from dc.baikal.ru (dc.baikal.ru [212.176.3.237]) by mail.postgresql.org (Postfix) with ESMTP id 86AE66324D0 for ; Fri, 23 Apr 2010 01:13:50 -0300 (ADT) Received: from it319k5.dc-local (it319k5.dc-local [10.0.4.75]) (authenticated bits=0) by dc.baikal.ru (8.13.8/8.13.8) with ESMTP id o3N4DmME024182 for ; Fri, 23 Apr 2010 13:13:48 +0900 Message-ID: <4BD11E7D.50302@dc.baikal.ru> Date: Fri, 23 Apr 2010 13:13:49 +0900 From: Vlad Arkhipov User-Agent: Thunderbird 2.0.0.0 (X11/20070326) MIME-Version: 1.0 To: pgsql-performance@postgresql.org Subject: Re: Optimization idea References: <4BD0161A.4010908@dc.baikal.ru> <4BD0430C.1050308@2ndquadrant.com> In-Reply-To: <4BD0430C.1050308@2ndquadrant.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0.79 tagged_above=-10 required=5 tests=BAYES_50=0.8, T_RP_MATCHES_RCVD=-0.01 X-Spam-Level: X-Archive-Number: 201004/296 X-Sequence-Number: 38546 Greg Smith пишет: > I can't replicate your problem on the current development 9.0; all > three plans come back with results quickly when I just tried it: > > Nested Loop (cost=0.00..50.76 rows=204 width=32) (actual > time=0.049..0.959 rows=200 loops=1) > -> Seq Scan on t1 (cost=0.00..1.06 rows=1 width=16) (actual > time=0.013..0.016 rows=1 loops=1) > Filter: (t = 2) > -> Index Scan using t_idx on t2 (cost=0.00..47.66 rows=204 > width=16) (actual time=0.029..0.352 rows=200 loops=1) > Index Cond: (t2.t = 2) > Total runtime: 1.295 ms > > Nested Loop (cost=0.00..1042.77 rows=20020 width=32) (actual > time=0.042..0.437 rows=100 loops=1) > -> Seq Scan on t1 (cost=0.00..1.06 rows=1 width=16) (actual > time=0.013..0.015 rows=1 loops=1) > Filter: (id = 3) > -> Index Scan using t_idx on t2 (cost=0.00..791.45 rows=20020 > width=16) (actual time=0.022..0.164 rows=100 loops=1) > Index Cond: (t2.t = t1.t) > Total runtime: 0.608 ms > > Bitmap Heap Scan on t2 (cost=16.11..558.73 rows=433 width=16) (actual > time=0.095..0.674 rows=400 loops=1) > Recheck Cond: (t = ANY ('{2,3,4}'::bigint[])) > -> Bitmap Index Scan on t_idx (cost=0.00..16.00 rows=433 width=0) > (actual time=0.075..0.075 rows=400 loops=1) > Index Cond: (t = ANY ('{2,3,4}'::bigint[])) > Total runtime: 1.213 ms > Just noticed a mistype in the first query. Here are the correct queries: create temp table t1 (id bigint, t bigint); insert into t1 values (1, 1); insert into t1 values (2, 2); insert into t1 values (2, 3); insert into t1 values (2, 4); insert into t1 values (3, 5); create temp table t2 (id bigint, t bigint); insert into t2 (id, t) select g, 2 from generate_series(1, 200) g; insert into t2 (id, t) select g, 3 from generate_series(201, 300) g; insert into t2 (id, t) select g, 4 from generate_series(301, 400) g; insert into t2 (id, t) select g, 1 from generate_series(401, 100000) g; insert into t2 (id, t) select g, 5 from generate_series(100001, 100100) g; create index t_idx on t2(t); analyze t1; analyze t2; explain analyze select * from t2 join t1 on t1.t = t2.t where t1.id = 2; explain analyze select * from t2 join t1 on t1.t = t2.t where t1.id = 3; explain analyze select * from t2 where t2.t in (2, 3, 4); I've just tried these queries on PostgreSQL 9.0alpha4, nothing differs from PostgreSQL 8.4.