0

我想执行某个选择(正如我在 sqldeveloper 中测试的那样)将检索大量数据(约 350,000 行)。最终,我想将这些行写入文件。

我打算编写一个 PERL 代码来完成它,我想知道是否有办法一次检索一行,将其写入我的输出文件并继续下一行。

也就是说,我希望获得与我原来的选择相同的结果,但更小块。

谢谢!!!

4

4 回答 4

2

如果您认为可以多次执行查询,则可以使用

SELECT .... FROM ...
WHERE ....
LIMIT 0, 100 // index_from, amount

第一次,下次向索引添加数量

SELECT .... FROM ...
WHERE ....
LIMIT 100, 100

您可以LIMIT 0,1一次获得一条记录,但您有 350k 条记录……这太疯狂了!

于 2012-04-11T07:47:17.840 回答
2

你说:

我想知道是否有办法一次检索一行,将其写入我的输出文件并继续下一行。

如果您只是想将数据导出到文件,您应该考虑使用SELECT ... INTO OUTFILE.

它将比运行每个查询快得多。

于 2012-04-11T07:51:34.380 回答
2

你只需要使用

$dbh->{'mysql_use_result'} = 1;

告诉 MySQL 驱动程序不要将整个结果加载到内存中。

接下来,您只需处理每个结果行

while ( my $ary_ref  = $sth->fetchrow_arrayref ) {

....
}
于 2012-04-11T07:57:01.183 回答
0

创建一个循环

SELECT * FROM my_table LIMIT 0, 1

然后下一次将你的限制增加一个

SELECT * FROM my_table LIMIT 1, 1
于 2012-04-11T07:48:31.467 回答