Received: from makus.postgresql.org (makus.postgresql.org [98.129.198.125]) by mail.postgresql.org (Postfix) with ESMTP id EA0D11BA1319 for ; Thu, 5 Apr 2012 09:32:16 -0300 (ADT) Received: from mail-bk0-f46.google.com ([209.85.214.46]) by makus.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1SFlrL-0002EQ-AV for pgsql-sql@postgresql.org; Thu, 05 Apr 2012 12:32:16 +0000 Received: by bkcik5 with SMTP id ik5so1319436bkc.19 for ; Thu, 05 Apr 2012 05:32:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type:content-transfer-encoding; bh=1vcEaw00g61UZoOKjggYCUzajqdeJuWRNCKMWYjpodY=; b=W/lbcxrvUcUnNR3wIBELvz4XK3IhEPqpicc+4CmHGxUR7dB6jxMG90FLNJPY0/3k9F //cNhiWgToKd/1BeNifebvSNmXGrZM2Oweuj/k4+48w1ta5mSEBa4KksdhMAFv1q8tTk hK8o4AtJ9r6StbmjMMaMIoaTQ2dMnNktZwx4yyqJQ/rcT7tljQ+hAybR9eobqHcTF5ei agescuDS2fjIfsZLw1yTbcZciAAfqFHoz+KjhVmYYfToswnApvYTtA/iAGWh610+nUOp AzHuglmLcWKajYOm6cY/RLd5Y6DZhvSSruzzVjC9/pi2R7VRKsllv0T5TtR2DBq9ztaa +dfA== Received: by 10.204.153.12 with SMTP id i12mr1085723bkw.120.1333629122339; Thu, 05 Apr 2012 05:32:02 -0700 (PDT) Received: from [192.168.178.16] (qtuning.xs4all.nl. [80.101.37.209]) by mx.google.com with ESMTPS id jr13sm8533057bkb.14.2012.04.05.05.32.01 (version=SSLv3 cipher=OTHER); Thu, 05 Apr 2012 05:32:01 -0700 (PDT) Message-ID: <4F7D90C0.3090800@gmail.com> Date: Thu, 05 Apr 2012 14:32:00 +0200 From: Mario Dankoor User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20120327 Thunderbird/11.0.1 MIME-Version: 1.0 To: pgsql-sql@postgresql.org Subject: Re: bad plan References: <4F7D843E.4060304@ulb.ac.be> <4F7D89F5.7090301@gmail.com> <4F7D8B3F.1030402@ulb.ac.be> In-Reply-To: <4F7D8B3F.1030402@ulb.ac.be> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Pg-Spam-Score: -2.6 (--) X-Archive-Number: 201204/12 X-Sequence-Number: 36489 Julien, I generally try avoid NOT predicates. If your geo_id is an integer, try geo_id > -1 or if it's a varchar geo_id > ''. The idea is that geo_id > 0 is false for null values. I don't think query optimizers are fond of NOT predicates. SELECT t_geo.frequence ,ST_SetSRID(gc.geom, 4326) as geom FROM ( SELECT geo_id ,count(*) AS frequence FROM hit.context_to_context_links WHERE geo_id > -1 AND taxon_id= ANY ( SELECT taxon_id FROM rab.ancestors WHERE ancestors.subphylum_id = 18830 ) GROUP BY geo_id ) as t_geo JOIN hit.geo_candidates gc ON gc.id = t_geo.geo_id; On 2012-04-05 2:08 PM, Julien Cigar wrote: > SELECT > t_geo.frequence, ST_SetSRID(gc.geom, 4326) as geom > FROM ( > SELECT > geo_id , count(*) AS frequence > FROM > hit.context_to_context_links > WHERE > NOT geo_id IS NULL ANDtaxon_id= ANY ( > SELECT > taxon_id > FROM > rab.ancestors > WHERE > ancestors.subphylum_id = 18830 > ) GROUP BY geo_id > ) as t_geo > JOIN > hit.geo_candidates gc ON gc.id = t_geo.geo_id;