I asked this on Stackoverflow and on Perlmonks, but hopefully I will get a more 
satisfactory and revealing insight straight from the DBI folks.

I have a Postgres table with more than 8 million rows. Given the following two 
ways of doing the same query, I get wildly different results.

        $q .= '%';

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

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


query 2 is at least an order of magnitude slower than query 1... seems like it 
is not using the indexes, while query 1 is using the index. And, yes, I have 
tried it with query 2 before query 1 to eliminate caching. There is a 
difference, but I don't know why, so would love hear an explanation.

Many tia,


--
Puneet Kishor

Reply via email to