システムを中断せずに MySQL の数百万行を削除
大量の重複行の削除を処理すると、システムの可用性を維持する際に課題が生じる可能性があります。参照されたシナリオでは、MySQL テーブルに何百万もの不要なレコードが含まれており、大きな障害となっています。
この問題に対処するには、テーブルのロックを回避する 1 つのアプローチは、複数の小さな削除クエリをループで実行することです。これにより、他の操作を並行して実行できるようになり、データベースの負荷が軽減されます。ただし、この方法でもパフォーマンスに影響があり、完了までに長時間かかる可能性があります。
あるいは、テーブルの名前を変更して空のバージョンを再作成すると、より信頼性の高い解決策が得られます。より多くの手順が必要になる可能性がありますが、このアプローチによりデータの整合性が保証され、ユーザーへの中断が最小限に抑えられます。名前変更されたテーブルをクリーンアップした後、新しい空のテーブルを削除しながら、名前を元に戻すことができます。マージされた行は、名前変更されたテーブルに追加できます。
ただし、より効率的な解決策は、チャンク削除戦略を利用することです。このアプローチでは、LIMIT 句を使用して、より小さなバッチで行を削除します。このプロセスをループ内で繰り返し、反復の間に短い一時停止を挟むことで、データベースは重大な中断を引き起こすことなく効果的に削除を処理できます。
<code class="sql">DELETE FROM `table` WHERE (whatever criteria) ORDER BY `id` LIMIT 1000;</code>
この方法では、システム パフォーマンスへの影響を最小限に抑えながら、継続的な削除が可能になります。影響を受ける行を定期的に確認することで、プロセスの完了を示すことができます。前述したように、反復間の一時停止を制御してこのアプローチをスクリプトに実装すると、最適なパフォーマンスとユーザー エクスペリエンスが得られます。
以上がシステムの可用性に影響を与えずに、MySQL の数百万行を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。