ホームページ >バックエンド開発 >PHPチュートリアル >mysql - PHP の一括挿入および更新の問題
PHPが大量のデータをバッチ処理する場合、私が考える解決策は次のとおりです
方法 1: foreach ループのトラバーサルで SQL ステートメントを構築し、それをデータベースに挿入します
xxx の値 (xxx, xxx, xxx) に挿入します
方法 2: foreach ループは SQL ステートメントを構築するために走査し、最後に
insert into xxx (field1, field2, field3) の値 (xxx1, xxx2, xxx3), (xxx1, xxx2, xxx3) を挿入します
上記は挿入のみです。挿入時に挿入されたデータがデータベースに存在するかどうかを最初に確認したい場合は、各挿入の前に選択操作を実行する必要があります。これは非効率ですか?ハマグリを最適化するにはどうすればよいですか?
実際には、更新する前に選択します。存在しない場合は、それを最適化する方法があります。
PHPが大量のデータをバッチ処理する場合、私が考える解決策は次のとおりです
方法 1: foreach ループのトラバーサルで SQL ステートメントを構築し、それをデータベースに挿入します
xxx の値 (xxx, xxx, xxx) に挿入します
方法 2: foreach ループは SQL ステートメントを構築するために走査し、最後に
insert into xxx (field1, field2, field3) の値 (xxx1, xxx2, xxx3), (xxx1, xxx2, xxx3) を挿入します
上記は挿入のみです。挿入時に挿入されたデータがデータベースに存在するかどうかを最初に確認したい場合は、各挿入の前に選択操作を実行する必要があります。これは非効率ですか?ハマグリを最適化するにはどうすればよいですか?
実際には、更新する前に選択します。存在しない場合は、このように最適化します。
1- Mysql には REPLACE INTO の構文もあり、存在する場合は更新され、存在しない場合は挿入されます。
2- Mysql には INSERT INTO... ON DUPLICATE KEY UPDATE の構文もあり、存在する場合は更新されます。 3- 実際の開発では、少なくとも 1,000 項目以下のデータを大量のバッチとして挿入することは非常にまれであるため、手間を省きたい場合は、通常、次のような予測を検証します。怠け者で4時間節約できれば、それによって引き起こされるトラブルは8時間寝ていれば十分です。
1) 挿入でデータが重複しないことが保証できる場合は、挿入の方が確実に適しています。
2) Index~、適切なインデックスはパフォーマンスを向上させるのに非常に役立ちます。3) mysql バッチインポートを使用すると、パフォーマンスが向上します。間違いなく役立ちますが、データが失われる可能性があるという欠点があります。
4) auto-commit=true に設定し、トランザクションを終了し、複数のレコード (1W レコードなど) を送信した後に 1 回コミットします。また、1W QPS を設定するのも非常に簡単です。単一マシン
5 ) mysql ライブラリを再設計し、読み取りと書き込みを分離し、クラスターを作成し、SSD をインストールします...
置換を使用すると、更新と挿入の問題を解決できます
重複キーの更新時 これを使用して、重複したくないフィールドごとに一意のインデックスを作成します。これにより、挿入するか更新するかを確認する必要がなくなります。 UPDATEに続くステートメントを繰り返し実行することで自動的に実行することができます
REPLACE と DUPLICATE を使用する必要はありません。次のことを試してください。
トランザクションを開始して、挿入が失敗した場合は、代わりに更新します。 リーリー