Re: Index not used with prepared statement - Mailing list pgsql-performance

From Andreas Seltenreich
Subject Re: Index not used with prepared statement
Date
Msg-id 87vf18x9gk.fsf@gate450.dyndns.org
Whole thread Raw
In response to Index not used with prepared statement  (Guido Neitzer <guido.neitzer@pharmaline.de>)
Responses Re: Index not used with prepared statement  (Guido Neitzer <guido.neitzer@pharmaline.de>)
List pgsql-performance
Guido Neitzer schrob:

> I have a performance problem with prepared statements (JDBC prepared
> statement).
>
> This query:
>
> PreparedStatement st = conn.prepareStatement("SELECT id FROM
> dga_dienstleister WHERE plz like '45257'");
>
> does use an index.
>
> This query:
>
>         String plz = "45257";
>         PreparedStatement st = conn.prepareStatement("SELECT id FROM
> dga_dienstleister WHERE plz like ?");
>         st.setString(1, plz);
>
> does NOT use an index.
>
> As it should in the end result in absolutely the same statement, the
> index should be used all the time.

I'm not perfectly sure, but since the index could only be used with a
subset of all possible parameters (the pattern for like has to be
left-anchored), I could imagine the planner has to avoid the index in
order to produce an universal plan (the thing behind a prepared
statement).

Is there a reason you are using the like operator at all? IMO using
the =-operator instead in your example should produce an "index-using
prepared statement".

HTH
Andreas
--

pgsql-performance by date:

Previous
From: Guido Neitzer
Date:
Subject: Index not used with prepared statement
Next
From: Guido Neitzer
Date:
Subject: Re: Index not used with prepared statement