ホームページ >データベース >mysql チュートリアル >メモリを使い果たさずに 9,000 万件のデータベース レコードを効率的に取得するにはどうすればよいですか?

メモリを使い果たさずに 9,000 万件のデータベース レコードを効率的に取得するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-22 04:42:12350ブラウズ

How Can I Efficiently Retrieve 90 Million Database Records Without Memory Exhaustion?

ScrollableResults を使用して大規模なデータ セットを処理する

大規模なデータセットを扱う場合、データ取得の最適化が重要になります。このシナリオでは、Hibernate の ScrollableResults を使用して 9,000 万件のデータベース レコードを読み取ると、データセット全体を RAM にロードしようとするため、メモリが枯渇する可能性があります。

これを回避するには、setFirstResult メソッドと setMaxResults メソッドを使用することをお勧めします。 。これらのメソッドでは、結果を反復処理する際に、データセットの特定の部分を指定して一度に取得できるため、メモリのボトルネックを効果的に回避できます。ただし、オフセットが増加すると、パフォーマンスが低下する可能性があります。

別の解決策は、カスタム SQL クエリ アプローチを採用することです。増加するオフセットに基づいてデータのサブセットを段階的に取得することにより、メモリのオーバーヘッドを削減できます。次のクエリ テンプレートは、この戦略を示しています。

SELECT * 
FROM person 
WHERE id > <offset> 
AND <other_conditions> 
ORDER BY id asc  
LIMIT <batch_size>

このクエリは、追加の条件に基づいてフィルタリングし、指定されたオフセットより大きい ID を持つレコードのバッチを取得します。このアプローチの増分的な性質により、メモリ リソースを過剰に消費することなく効率的なデータ取得が保証されます。

さらに、MySQL クエリ自体を最適化することでパフォーマンスを向上させることができます。適切なインデックスを使用し、最適化された条件を確保すると、処理時間を大幅に短縮できるため、この方法は大規模なデータセットを処理するための実行可能なソリューションになります。

以上がメモリを使い果たさずに 9,000 万件のデータベース レコードを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。