2

MySQLテーブルからアプリケーションのPHPに数百万行を超える行を取得しようとしました。

データを取得する手順は次のようになります。

  1. mysql_query()またはmysqli_query()を使用してmySQLにクエリを送信します。

  2. mysql_fetch_array()を使用して各行をループする配列に結果を設定するか、mysqli_fetch_all()を使用して配列を追加します。

「メモリ不足」または「*バイトのメモリサイズが使い果たされました」というメッセージを受け取りました。

'memory_limit'を変更すれば、それらを解決できる可能性があります。

しかし、なぜそれらのメッセージが表示されたのか知りたいです。

'memory_limit'を128M->512M->1024Mのように変更しました。

128Mを設定すると、許可されたメモリサイズ* bytesが使い果たされてクエリの送信に失敗し、配列領域に結果を追加できません。

次に512Mを設定すると、クエリは正常に終了しましたが、*バイトの許容メモリサイズが使い果たされた配列に結果を追加できません。

最後に1024Mの設定、クエリの送信と結果を配列に追加するための結果の設定の両方が終了しました。ただし、mysqli_fetch_all()がメモリ不足のフィールドである場合がありました。

私が理解できないことの1つは、メモリ不足が常に発生しない理由です。

私が知りたいもう1つのことは、テーブルから100万を超える行全体をPHPに取り込む方法です。行全体を取得したら、csvなどのファイルのダウンロードを含むブラウザ操作でユーザーが行にアクセスできるようにします。

4

2 に答える 2

1

膨大な数の行を取得するための最良のオプションは、クエリでとを使用してそれらをループすることですlimitoffset

これにより、直面しているメモリの問題を防ぐことができます。

于 2012-11-22T09:22:53.553 に答える