Different query plan used for the same query depending on how parameters are passed

From: David Chapman <david(dot)chapman(at)mavensecurities(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: Different query plan used for the same query depending on how parameters are passed
Date: 2017-05-16 13:01:44
Message-ID: CAOsj6S9gAFzfn+gqO5B-J9y6+CDuZAO6b7+7CV=9jnZ+4f+7mQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

I have a table that includes two text columns t1 and t2, and a composite
index on these columns. When issuing a query of the following form:

SELECT * FROM test WHERE t1 = 'X' and t2 = ANY(ARRAY['Y1', 'Y2', ..])

I have observed that it will use the index and have reasonable performance
if the whole query is passed as a single big string. However if it is
parameterised (I'm using Npgsql) it switches to doing a sequence scan and
performs terribly.

The table contains approx 2.3 million records and the query matches about
20k records (i.e. there are 20k 'Y' values in the array).

I have experimented with changing work_mem, preparing the statement in
advance, ANALYZEing the table, none of these change the behavior.

Why does the query planner choose to ignore the index when the command is
parameterised?

--

This e-mail together with any attachments (the "Message") is confidential
and may contain privileged information. If you are not the intended
recipient or if you have received this e-mail in error, please notify the
sender immediately and permanently delete this Message from your system.
Do not copy, disclose or distribute the information contained in this
Message.

Maven Investment Partners Ltd (No. 07511928), Maven Derivatives Ltd (No.
07511840) , MVN Asset Management Limited (No. 09659116), Maven Europe Ltd
(No. 08966593), Maven Derivatives Asia Limited (No.10361312) & Maven
Securities Holding Ltd (No. 07505438) are registered as companies in
England and Wales and their registered address is Level 3, 6 Bevis Marks,
London EC3A 7BA, United Kingdom. The companies’ VAT No. is 135539016. Maven
Asia (Hong Kong) Ltd (No. 2444041) is registered in Hong Kong and its
registered address is 20/F, 198 Wellington St, Hong Kong. Only Maven
Derivatives Ltd and MVN Asset Management Limited are authorised and
regulated by the Financial Conduct Authority (Maven Derivatives Ltd FRN:
607267, MVN Asset Management Limited FRN: 714429)

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Daniel Verite 2017-05-16 13:15:06 Re: storing large files in database - performance
Previous Message Devrim Gündüz 2017-05-16 12:26:54 PostgreSQL RPMs for PPC64LE are released