Creating an index and using lower(column) does not change the explain
plan estimates.
It seems that it is not using index for like or ilike queries
irrespective of whether it have a pattern matching character in it or
not. (using PostgreSQL 7.3.3)
On googling I found this thread
http://archives.postgresql.org/pgsql-sql/2004-11/msg00285.php
It says that index is not used if the search string begins with a % symbol.
rgds
Antony Paul
On Mon, 24 Jan 2005 20:58:54 +1100, Russell Smith <mr-russ@pws.com.au> wrote:
> On Mon, 24 Jan 2005 08:18 pm, Antony Paul wrote:
> > Hi,
> > I have a query which is executed using ilike. The query values are
> > received from user and it is executed using PreparedStatement.
> > Currently all queries are executed as it is using iilike irrespective
> > of whether it have a pattern matching character or not. Can using =
> > instead of ilike boot performance ?. If creating index can help then
> > how the index should be created on lower case or uppercase ?.
> >
> It depends on the type of queries you are doing.
>
> changing it to something like lower(column) like lower('text%'), and
> creating an index on lower(column) will give you much better performance.
>
> If you have % in the middle of the query, it will still be slow, but I assume that is not
> the general case.
>
> I am not sure what the effect of it being prepared will be, however I've had much success
> with the method above without the queries being prepared. Others may be able to offer advice
> about if prepare will effect it.
>
> Regards
>
> Russell Smith
>