简短方式:
my $count = $dbh->selectrow_array("SELECT COUNT(name) AS RESCOUNT FROM users");
很长的路要走
my $sth = $dbh->prepare("SELECT COUNT(name) AS RESCOUNT FROM users");
$sth->execute() or die "$DBI::errstr";
my $count = $sth->fetchrow_array();
$sth->finish;
selectrow_array,fetchrow_array->但我不需要数组.我检查了文档,但没有发现标量.只是数组和哈希的方法.
我使用的方法足够快,但是我只是想知道是否有更好,最快的方法来从调用中获取单个值.还是这是最快的方法?
最佳答案
最快的方法是使用
fetchrow_arrayref
或selectrow_arrayref
,具体取决于您有多少执行.只有在循环中执行并且您有数千(甚至数十万)行时,这才真正有所作为.
使用fetchrow_array时,每次都会复制一个副本,这会使您放慢速度.还请记住,标量上下文的行为是only partly defined.
If called in a scalar context for a statement handle that has more than one column,it is undefined whether the driver will return the value of the first column or the last. So don’t do that.
大约10年前或更早以前,曾经有一篇关于DBI速度的好演讲,我现在找不到.还要看一下this very old Perlmonks post,它在很大程度上解释了性能.
请记住,只有在真正知道需要时才进行优化.大多数时候你不会.