gpt4 book ai didi

mysql - 加速 perl DBI fetchrow_hashref

转载 作者:可可西里 更新时间:2023-11-01 06:39:49 26 4
gpt4 key购买 nike

我有一些看起来像这样的东西:

my $report = new ReportGenerator; #custom object
my $dbh = $dbc->prepare('SELECT * FROM some_table WHERE some_condition'); #DBI handle
$dbh->execute();
while(my $href = $dbh->fetchrow_hashref){
$report->process_record($href);
}
$dbh->finish();
print $report->printReport();

我的问题是循环的每次迭代都非常慢。问题是MySQL。我想知道是否有可能在 while 循环中放置某种包装器以使其一次获取多个记录,与此同时,将所有记录获取到内存中也不实用。我不担心代码的效率(hashref 与 arrayref 等)。相反,我有兴趣一次获取 10000 条记录。

数据库有大约 500 万条记录。我无法更改/升级服务器。

谢谢

最佳答案

您可以使用接受“maxrows”参数的 fetchall_arrayref 函数:

while (my $data = $dbc->fetchall_arrayref(undef, 10000)) {
for my $row( @{$data} ) {
$report->process_record($row);
}
}

您还可以查看 RowCacheSize该属性试图控制从您的驱动程序获取的数据中返回的记录数。

关于mysql - 加速 perl DBI fetchrow_hashref,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8605322/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com