В документации DBI это рекомендуемый код для многократного выполнения запроса:
$sth = $dbh->prepare_cached($statement);
$sth->execute(@bind);
$data = $sth->fetchall_arrayref(@attrs);
$sth->finish;
Однако я вижу, что много * методы запроса позволяют передавать подготовленный и кэшированный дескриптор оператора вместо строки запроса, что делает это возможным:
$sth = $dbh->prepare_cached($statement);
$data = $dbh->selectall_arrayref($sth, \%attrs, @bind);
Что-то не так с этим подходом? Я не видел, чтобы он использовался в реальных условиях.
FWIW, я протестировал эти две реализации. И второй подход появляется немного (на 4%) быстрее при запросе двух последовательных строк с использованием fetchall_arrayref
в первой реализации и selectall_arrayref
во второй.
* Полный список методы запроса, которые это поддерживают: использовать подготовленные операторы с этим методом - значит использовать второй код путь выше)