2016-09-28 10 views
0

を挿入してください。 100/1000の挿入ステートメントを集めて、一度にバッチ挿入を実行すると、1秒ごとに1つの挿入ステートメントが生成されるとします。システムが1つを生成するときに挿入するだけですか?mysql:今すぐ挿入して多数の挿入文を集めてから

+2

これはあなたの要件に左右されませんか? – eggyal

+0

@eggyal? – guo

+0

また、挿入するテーブルも考慮する必要があります。いくつのインデックスと外部キーがありますか?また、あなたのデータはどれほど揮発性ですか?メモリに1000個のステートメントを収集すると、16分のデータが失われる可能性があります。 –

答えて

1

あなたの条件に応じて、より良いアプローチを選択する必要があります。

[実施例1]

INSERT INTO test_table (col1, col2) values (1,"value1"),(2,"value2"), (3,"value3"); 

実施例1のように、[実施例2]

INSERT INTO test_table (col1, col2) values (1,"value1"); 
INSERT INTO test_table (col1, col2) values (2,"value2"); 
INSERT INTO test_table (col1, col2) values (3,"value3"); 

挿入が10倍以上速い例2 よりなりしかし、ある場合操作の失敗は、例えば、 UNIQUE KEYによって、すべてのトランザクションが中断されるため、すべてのデータを正しく挿入しません。したがって、1つのグローバルインサートによりパフォーマンスが向上し、いくつかのインサートにより柔軟性が増します。

0

@eggyalが示唆したように、これはあなたのワークロードに依存します:

  • 各行のサイズが挿入されていますか?それがかなり小さい場合、一般に1秒あたり1つを生成している場合、1秒間に挿入するか1000/10000を蓄積してからコミットするかは関係ありません。
  • どのような耐久性が必要ですか?要求時に各インサートがディスクに挿入されていることを確認する必要がある場合、サーバーの最高耐久性設定とペアにする必要があります。 Redisの他のどこかの行をキャッシュし、MySQLへの挿入をバッチする前にそれに慣れていれば、Redisの耐久性設定が機能する限り、あなたのために働くことができます。
関連する問題