ok. I am completely lost here.

On Feb 13, 2012, at 8:10 PM, David Nicol wrote:

> On Mon, Feb 13, 2012 at 7:16 PM, Puneet Kishor
> 
>> 
>> 
>> ahhhh... that makes sense. I would like to confirm this, because, if true,
>> then it is a strike against statements prepared with bind values.
>> 
> 
> the postgres reference about when LIKE statements get to use indices states
> that they are only available for /constants/ ending with %. It seems like
> this would be simple enough to fix, if you want to be a hero and get a
> patch accepted into Postgres.
> 
> It's in the fourth paragraph at
> http://www.postgresql.org/docs/8.4/static/indexes-types.html
> 


why should a patch be required in Postgres? Seems to extremely naive pov that 
this is an issue with DBI.


> 
> Also there is interesting stuff about creating indices for functions, so
> you can index on lower(a) and then queries using lower(a) will get
> optimized.
> After reading that bit of the postgres docs I wonder if doing something like
> 
>    lower(a) like ('^' || ?)
> 
> would allow the index to be used. Probably not, as the result would not be
> a constant, even though it would be anchored to the beginning.


So, the index I have created is as follows

        CREATE INDEX idxa ON t (Lower(a) varchar_pattern_ops);

This is a web app (although I have done tests using standalone, non-web, 
scripts as well). The user types a few characters that are received in $q. I 
then do

        $q = lc($q) . '%';

followed by

        my $sql = qq{SELECT a, b, c FROM t WHERE Lower(a) LIKE '$q'};
        my $sth = $dbh->prepare($sql);
        $sth->execute();

The above takes, say, 200-400 ms depending on the term. Or, in the case of the 
query that is really slow

        my $sth = $dbh->prepare(qq{SELECT a, b, c FROM t WHERE Lower(a) LIKE 
?});
        $sth->execute($q);

The above takes 3 to 4 seconds. Pretty much identical queries with identical 
results by vastly difference performance.

Isn't this a DBI issue instead of a Postgres issue?

--
Puneet Kishor

Reply via email to