mysql - 如何逐行从大表中获取数据

标签 mysql perl dbi

我需要从 mysql 表中获取所有数据。到目前为止我尝试的是:

my $query = $connection->prepare("select * from table");
$query->execute();
while (my @row=$query->fetchrow_array)
{
    print format_row(@row);
}

但总有一个但是...

表有大约 600M 行,显然所有查询结果都在 execute() 命令后存储在内存中。内存不足:(

我的问题是:

有没有办法使用 perl DBI 从表中逐行获取数据?像这样:

my $query = $connection->prepare("select * from table");
while (my @row=$query->fetchrow_array)
{
    #....do stuff
}

顺便说一句,分页速度很慢:/

最佳答案

apparently all results from query is store in memory after execute() command

这是 mysql 客户端库的默认行为。您可以使用 mysql_use_result attribute 禁用它在数据库或语句句柄上。

请注意,当所有行都流式传输到客户端代码时,您在表上拥有的读锁将保持更长的时间。如果这可能是一个问题,您可能需要使用 SQL_BUFFER_RESULT .

关于mysql - 如何逐行从大表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50875261/

相关文章:

珀尔 : How to use constant tag value as key of associative array in?

perl - 使用 XML::Twig 处理嵌套元素

postgresql - SET SESSION AUTHORIZATION 多用户 mod-perl2 连接缓存的安全设计

mysql - 如何使用 group by 子句进行左连接以返回所有行?

perl - 角色角色的驼鹿角色

perl - fetchall_arrayref 中的 foreach 值

perl - Perl,DBD::Oracle和Oracle 10g的字符集问题

mysql - 用户组表架构

php - 如何在 dropzone 上传后立即更新文件名?

php - mysql 连接到许多表,同时包括一个主表