Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1X1WCB-00084L-QJ for pgsql-performance@arkaria.postgresql.org; Mon, 30 Jun 2014 07:40:11 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1X1WCB-00035H-A9 for pgsql-performance@arkaria.postgresql.org; Mon, 30 Jun 2014 07:40:11 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1X1WCA-00034v-1k for pgsql-performance@postgresql.org; Mon, 30 Jun 2014 07:40:10 +0000 Received: from 3.mo4.mail-out.ovh.net ([46.105.57.129] helo=mo4.mail-out.ovh.net) by makus.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1X1WC6-00035b-Eo for pgsql-performance@postgresql.org; Mon, 30 Jun 2014 07:40:08 +0000 Received: from mail137.ha.ovh.net (gw6.ovh.net [213.251.189.206]) by mo4.mail-out.ovh.net (Postfix) with SMTP id 35FC4FFA82E for ; Mon, 30 Jun 2014 09:40:02 +0200 (CEST) Received: from b0.ovh.net (HELO queueout) (213.186.33.50) by b0.ovh.net with SMTP; 30 Jun 2014 09:40:02 +0200 Received: from 212-198-249-70.rev.numericable.fr (HELO ?192.9.200.158?) (mathieu.pujol@realfusio.com@212.198.249.70) by ns0.ovh.net with SMTP; 30 Jun 2014 09:40:00 +0200 Message-ID: <53B11450.2010001@realfusio.com> Date: Mon, 30 Jun 2014 09:40:00 +0200 From: Pujol Mathieu User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: pgsql-performance@postgresql.org Subject: Re: GIST optimization to limit calls to operator on sub nodes References: <53A7D547.5080302@realfusio.com> <20140629201419.GA63570@hasegeli.local> <4113.1404073822@sss.pgh.pa.us> In-Reply-To: <4113.1404073822@sss.pgh.pa.us> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-Ovh-Tracer-Id: 1463669879776853041 X-Ovh-Remote: 212.198.249.70 (212-198-249-70.rev.numericable.fr) X-Ovh-Local: 213.186.33.20 (ns0.ovh.net) X-OVH-SPAMSTATE: OK X-OVH-SPAMSCORE: 0 X-OVH-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrfeejfedrtdekucetufdoteggodetrfcurfhrohhfihhlvgemucfqggfjnecuuegrihhlohhuthemuceftddtnecu X-Spam-Check: DONE|U 0.500001/N X-VR-SPAMSTATE: OK X-VR-SPAMSCORE: 0 X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrfeejfedrtdekucetufdoteggodetrfcurfhrohhfihhlvgemucfqggfjnecuuegrihhlohhuthemuceftddtnecu X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-performance Precedence: bulk Sender: pgsql-performance-owner@postgresql.org Le 29/06/2014 22:30, Tom Lane a écrit : > Emre Hasegeli writes: >> Pujol Mathieu : >>> I made my own index to handle specific data and operators. It works >>> pretty fine but I wonder if it was possible to optimize it. >>> When I run my operator on a GIST node (in the method >>> gist_range_consistent) it returns "NotConsistent" / >>> "MaybeConsistent" / "FullyConsistent". >>> NotConsistent -> means that all subnodes could be ignored, >>> gist_range_consistent return false >>> MaybeConsistent -> means that at least one subnode/leaf will be >>> consistent, gist_range_consistent return true >>> FullyConsistent -> means that all subnodes/leaves will be >>> consistent, gist_range_consistent return true >>> >>> So like with the "recheck flag" I would like to know if there is a >>> way to notify postgres that it is not necessary to rerun my operator >>> on subnodes, to speedup the search. >> I do not think it is possible at the moment. The GiST framework can >> be extended to support this use case. I am not sure about the >> speedup. Most of the consistent functions do not seem very expensive >> compared to other operations of the GiST framework. I would be >> happy to test it, if you would implement. > I don't actually understand what's being requested here that the > NotConsistent case doesn't already cover. > > regards, tom lane > > Hi, The NotConsistent case is correctly covered, the sub nodes are not tested because I know that no child could pass the consistent_test. The MaybeConsistent case is also correctly covered, all sub nodes are tested because I don't know which sub nodes will pass the consistent_test. My problem is with the FullyConsistent, because when I test a node I can know that all it's childs nodes and leaves will pass the test, so I want to notify GIST framework that it can't skip consistent test on those nodes. Like we can notify it when testing a leaf that it could skip consistent test on the row. Maybe I miss something on the API to do that. On my tests, the "recheck_flag" works only for leaves. Thanks Mathieu -- Sent via pgsql-performance mailing list (pgsql-performance@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance