У меня есть стол Postgres с более чем 8 миллионами строк. Учитывая следующие два способа выполнения одного и того же запроса через DBD::Pg
, я получаю совершенно разные результаты.тот же запрос, два разных способа, значительно отличная производительность
$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);
запрос 2, по крайней мере, на порядок медленнее, чем запрос 1 ... кажется, что он не использует индексы, в то время как запрос 1 используется индекс.
Хотелось бы услышать, почему.
Как вы измеряете скорость? – TLP
изначально это было просто от наблюдения ... разница в том, что это очевидно.Затем я помещаю числа в наблюдение с помощью «Use Benchmark»; – punkish
Вам следует попробовать переключить порядок тестов, чтобы исключить какие-либо эффекты кеширования. – TLP