数百万行を含む大規模な MySQL 選択を処理する場合、データ取得中にメモリ制約の問題が発生する可能性があります。この記事では、LIMIT 機能を利用して、管理可能なチャンクでデータを取得することで、この課題に対する解決策を検討します。
大規模なデータセットを繰り返し取得するには、LIMIT 機能を使用できます。開始行と取得する行の最大数を指定することで、選択プロセスをより小さなサブセットに分割できます。たとえば、次のクエリを実行すると、
SELECT * FROM MyTable ORDER BY whatever LIMIT 0,1000
は最初の 1,000 行をフェッチします。後続の 1,000 行のセットを取得するには、
SELECT * FROM MyTable ORDER BY whatever LIMIT 1000,1000 -- rows 1,001 - 2,000 SELECT * FROM MyTable ORDER BY whatever LIMIT 2000,1000 -- rows 2,001 - 3,000
のような調整された LIMIT 値を使用して同様のクエリを発行できます。ただし、この方法では、実行中にテーブルが変更される可能性があるため、一貫した行の順序が保証されません。取得プロセス。これに対処するには、まず一時テーブルを作成し、順序付けされた結果をそこに設定します:
CREATE TEMPORARY TABLE MyChunkedResult AS ( SELECT * FROM MyTable ORDER BY whatever );
これにより、行をチャンクで取得する間、行の順序がそのまま維持されることが保証されます:
SELECT * FROM MyChunkedResult LIMIT 0, 1000; SELECT * FROM MyChunkedResult LIMIT 1000,1000; SELECT * FROM MyChunkedResult LIMIT 2000,1000; .. and so on.
各チャンクの適切な開始行を決定し、結果の終わりを確認するために、カスタム ロジックを実装できます。パフォーマンスを最適化するには、1,000 レコードよりも大幅に大きなチャンク サイズを使用することをお勧めします。
データの取得が完了したら、リソース管理のために一時テーブルを削除することをお勧めします。
DROP TEMPORARY TABLE MyChunkedResult;
このチャンク化された取得を採用するこのアプローチによりパフォーマンスが大幅に向上し、大規模な MySQL データセットを正常に抽出できるようになります。
以上がMySQL から大規模なデータセットを分割して効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。