(sqldeveloperでテストしたように)非常に大量のデータ(〜350,000行)を取得する特定の選択を実行したいと思います。最終的に、これらの行をファイルに書き込みたいと思います。
私はそれを行う PERL コードを書くつもりですが、一度に 1 行ずつ取得し、それを出力ファイルに書き込んで次の行に進む方法があるかどうか疑問に思っていました。
つまり、元の選択と同じ結果をより小さなチャンクで取得したいと考えています。
ありがとう!!!
あなたはただ使う必要があります
$dbh->{'mysql_use_result'} = 1;
MySQLドライバーに結果全体をメモリにロードしないように指示します。
次に、各結果行を次のように処理します
while ( my $ary_ref = $sth->fetchrow_arrayref ) {
....
}
クエリを何度も実行して支払うことができると思われる場合は、次を使用できます
SELECT .... FROM ...
WHERE ....
LIMIT 0, 100 // index_from, amount
初めて、次回はインデックスに金額を追加
SELECT .... FROM ...
WHERE ....
LIMIT 100, 100
一度に 1 つのレコードを取得するために使用することもできますLIMIT 0,1
が、350,000 のレコードがあるということです... クレイジーです!!
あなたが言った:
一度に 1 行ずつ取得し、それを出力ファイルに書き込んで次の行に進む方法があるかどうか疑問に思っていました。
データをファイルにエクスポートするだけの場合は、SELECT ... INTO OUTFILE
.
各クエリを実行するよりもはるかに高速に実行されます。
ループを作成する
SELECT * FROM my_table LIMIT 0, 1
そして、次回は制限を1つ増やします
SELECT * FROM my_table LIMIT 1, 1