Re: getting ILIKE or ~* to use indexes....

From: "Josh Berkus" <josh(at)agliodbs(dot)com>
To: "Rajesh Kumar Mallah(dot)" <mallah(at)trade-india(dot)com>, pgsql-sql(at)postgresql(dot)org
Subject: Re: getting ILIKE or ~* to use indexes....
Date: 2002-08-10 18:10:16
Message-ID: web-1607387@davinci.ethosmedia.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Rajesh,

> I want my query to use indexes for company name searches but its not
> happening unless
> is use '=' which does not server the purpose.
>
> eg
>
> tradein_clients=# explain SELECT co_name FROM unified_data where
> co_name ilike '%rajesh%' ;

Well, for an *anchored* case-insensitive search, you can create an
index on lower(field_name) to use an index.

CREATE INDEX idx_uni_co_name ON unifed_data(lower(co_name));
SELECT co_name FROM unified_data where
lower(co_name) LIKE (lower('rajesh') || '%') ;

And that will use the index.

However, what you are doing is an *unanchored* text search, meaning
that you are searching for 'rajesh' anywhere in the field. No standard
index can help you with that.

Instead, you should look into Full Text Search tools. There's a simple
one in /contrib in the Postgresql source, and an more robust one
available from the OpenFTS project.

-Josh Berkus

In response to

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message Aaron Held 2002-08-10 21:01:31 update on a large table
Previous Message Rajesh Kumar Mallah. 2002-08-10 06:13:54 getting ILIKE or ~* to use indexes....