1

db->insert_batch 関数を使用すると、Codeigniter は 100 回の挿入ごとに行をスライスすることに気付きました。

その背後にある理由は何ですか?一気にやった方がお得じゃないですか?

また、Codeigniter を使用したその観点から、私の知る限り、1 つの接続で複数のテーブルに複数の挿入を行うことはできません。

これら 3 つのシナリオのパフォーマンスの比較は何ですか?

1- Do 2220 挿入を 1 つの接続にします。1 つのテーブルに 20、他のテーブルに 200、最後のテーブルに 2200。

2- CodeIgniter ActiveRecord ライブラリが示唆するように、同じ挿入 (?) 1 回のクエリで 1 つのテーブルに 10、2 つの異なるクエリで 2 番目のテーブルに 200、20 のクエリで 3 番目のテーブルに 2000 の挿入。

行ごとに 3 ~ 2220 の異なるクエリ。

4

2 に答える 2

0

私の知る限り、一度に 1 つのテーブルにしか挿入できないため、#1 と #3 は意味がありません (そして、あなたの数字は合計されません)。

バッチ挿入の理由は、非常に制限的な書き込みロックが発生するためです。DB エンジンによっては、挿入によってテーブル レベルの書き込みロックが発生し、リクエスト キューが構築され、プールが制限に達したときに最終的にリクエストが拒否される可能性があります。

バッチ処理により、挿入を実行し、時折ロックを解放できるため、おそらくより高速なクエリが再びロックする前に時間を取得できます。

于 2013-02-09T21:07:16.840 に答える
0

すべてをトランザクションでラップできれば、パフォーマンスが向上します。遅延挿入も調べてください。

于 2013-02-09T21:16:50.643 に答える