奇妙な質問があります。NYTProf でコードを数回プロファイリングした後。非常に高速であるべきだと思われる遅いコードがありますか?
if($my_var){
# spent 112s making 25764253 calls to DBI::st::fetch, avg 4µs/call
実行に187秒かかるラインで?if ステートメントのコードはバインド変数を使用していますが、$my_var はそれらの変数の 1 つではありません。そして、それがなぜですか?
プロファイラーは単にバグがあり、何か他のものを拾っているだけですか? このステートメントは
while($sth->fetch)
ループしますが、2 つのステートメントの間にコードがあり、そのコードは問題ありません。実際、コード内のすべての if ステートメントが不当に遅いように見えますか?
私が得ることができる助けを探しているだけです。コード全体を投稿することはできません。しかし、いくつかの疑似コードは次のとおりです。
use DBI;
my $dbh = <new mysql connection>;
my $sth = $dbh->prepare('SELECT A, B, C FROM D');
$sth->execute();
$sth->bind_columns(\my($a,$b,$c));
while($sth->fetch){
#do some fun stuff here.
my $d = $hash_lookup{$c} // 0;
if($d){
#do some more fun stuff here. This is where DBI::st::fetch is apparently being called?
}
}