我有这个代码来获取值计数。
简短的方法:
my $count = $dbh->selectrow_array("SELECT COUNT(name) AS RESCOUNT FROM users");
Run Code Online (Sandbox Code Playgroud)
很长的路要走
my $sth = $dbh->prepare("SELECT COUNT(name) AS RESCOUNT FROM users");
$sth->execute() or die "$DBI::errstr";
my $count = $sth->fetchrow_array();
$sth->finish;
Run Code Online (Sandbox Code Playgroud)
selectrow_array, fetchrow_array --> 但我不需要数组。我检查了文档,但没有发现标量。只是数组和散列的方法。我使用的方法足够快,但我很好奇是否有更好、最快的方法从调用中获取单个值。或者这是最快的方法?
最快的方法是使用fetchrow_arrayref或selectrow_arrayref,具体取决于您执行的次数。仅当在循环中执行并且您有数千(或更确切地说数十万)行时,这才会真正产生影响。
使用时fetchrow_array,它每次都会进行复制,这会减慢你的速度。另请记住,标量上下文的行为仅部分定义。
如果在标量上下文中调用具有多个列的语句句柄,则驱动程序将返回第一列还是最后一列的值是未定义的。所以不要这样做。
您也可以执行bind_col,这与参考文献一起使用。
大约 10 多年前,曾经有过关于 DBI 速度的精彩介绍,但我现在找不到了。另请参阅这篇非常古老的 Perlmonks 帖子,其中解释了很多有关性能的内容。
请记住,只有当您真正知道需要时才应该进行优化。大多数时候你不会。