Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1Xxknu-0004Ey-Uq for pgsql-sql@arkaria.postgresql.org; Sun, 07 Dec 2014 22:59:51 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1Xxknt-0001Ot-Tf for pgsql-sql@arkaria.postgresql.org; Sun, 07 Dec 2014 22:59:49 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1Xxknr-0001Ok-Tr for pgsql-sql@postgresql.org; Sun, 07 Dec 2014 22:59:48 +0000 Received: from mail-qg0-x236.google.com ([2607:f8b0:400d:c04::236]) by magus.postgresql.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1Xxknn-0007IC-S6 for pgsql-sql@postgresql.org; Sun, 07 Dec 2014 22:59:46 +0000 Received: by mail-qg0-f54.google.com with SMTP id q107so2748851qgd.41 for ; Sun, 07 Dec 2014 14:59:40 -0800 (PST) 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 :content-type:content-transfer-encoding; bh=6d6f8aLvp0arx6K0gs0RF7kNbfa3M1rVB5ltUQIGovA=; b=TgsSXb0JuCqXHaTrQw9HlsI5Qwrsrtzh0PzyokIlCKkUsV8X5ssxfQf9IFZGkQYcQi IzH2BFXgluey+/OX0j6bLTxGfpsz8nwYR0ClpO1CNP2UPgQMAPF+r6bLIAsbiPQhje9/ rtBaM6DU+iShr0DcLnictyZx4gAeKz4UFK0PdcWAawFA255FqMRT0yin8PpXew7Apt1P cfzkWAaP3X1YFSXShS99HMlYdPL1+HcsMK1YRVSYWxDxz04cZPfLmy1ollRtwqu/GODN q9fP2WfZehcKq/UFcES9VjRfvIV7rVVP1hFFjyn4qC0elUXP0uiXp30xNS+AN35f7Dle OsVg== X-Received: by 10.224.25.79 with SMTP id y15mr47519738qab.78.1417993180696; Sun, 07 Dec 2014 14:59:40 -0800 (PST) Received: from timbomac-2.local (host247.181-15-182.telecom.net.ar. [181.15.182.247]) by mx.google.com with ESMTPSA id c75sm36227094qge.20.2014.12.07.14.59.39 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sun, 07 Dec 2014 14:59:40 -0800 (PST) Message-ID: <5484DBDA.6090405@gmail.com> Date: Sun, 07 Dec 2014 19:59:38 -0300 From: Tim Dudgeon User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: pgsql-sql@postgresql.org Subject: querying with index on jsonb slower than standard column. Why? Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Pg-Spam-Score: -2.7 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-sql Precedence: bulk Sender: pgsql-sql-owner@postgresql.org I was doing some performance profiling regarding querying against jsonb columns and found something I can't explain. I created json version and standard column versions of some data, and indexed the json 'fields' and the normal columns and executed equivalent queries against both. I find that the json version is quite a bit (approx 3x) slower which I can't explain as both should (and are according to plans are) working against what I would expect are equivalent indexes. Can anyone explain this? Example code is here: create table json_test ( id SERIAL, assay1_ic50 FLOAT, assay2_ic50 FLOAT, data JSONB ); DO $do$ DECLARE val1 FLOAT; val2 FLOAT; BEGIN for i in 1..10000000 LOOP val1 = random() * 100; val2 = random() * 100; INSERT INTO json_test (assay1_ic50, assay2_ic50, data) VALUES (val1, val2, ('{"assay1_ic50": ' || val1 || ', "assay2_ic50": ' || val2 || ', "mod": "="}')::jsonb); end LOOP; END $do$ create index idx_data_json_assay1_ic50 on json_test (((data ->> 'assay1_ic50')::float)); create index idx_data_json_assay2_ic50 on json_test (((data ->> 'assay2_ic50')::float)); create index idx_data_col_assay1_ic50 on json_test (assay1_ic50); create index idx_data_col_assay2_ic50 on json_test (assay2_ic50); select count(*) from json_test; select * from json_test limit 10; select count(*) from json_test where (data->>'assay1_ic50')::float > 90 and (data->>'assay2_ic50')::float < 10; select count(*) from json_test where assay1_ic50 > 90 and assay2_ic50 < 10; Thanks Tim -- Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-sql