2

MysqlにInnoDbテーブルがあり、挿入を非常に迅速に処理する必要があります(他のすべては必要なだけ遅くなる可能性があります)。テーブルにはリレーションがないか、自動インクリメントされるIDとタイムスタンプにインデックスが付けられます。

複数のクライアントからスクリプトを実行して、割り当てられた時間内にできるだけ多くのレコードを挿入し(ループ挿入)、1秒あたりの挿入数を計算しました。

1秒あたりの挿入数は平均200回で、必要なのは約20000です。スクリプトを実行しているクライアントの数やスクリプトを実行しているマシンによってパフォーマンスが変わることはありません。

これらの挿入のパフォーマンスを高速化する方法はありますか?

- - - 編集 - - - -

ご協力ありがとうございます。起動するとすべての挿入が複数の接続から行われるため、挿入をグループ化できませんでした。そのテーブルのエンジンをMyISAMに切り替えることになり、1秒あたりの挿入数はすぐに40,000に達しました。

4

3 に答える 3

2

どの主キーを使用しましたか?

InnoDBはクラスター化インデックスを使用するため、すべてのデータは主キーインデックスと同じ順序になります。

自動インクリメントタイプの主キーを使用しない場合は、挿入ごとに大容量のディスク操作が行われます。他のすべてのデータをプッシュし、新しい要素を挿入します。

詳細については、 http://dev.mysql.com/doc/refman/5.0/en/innodb-table-and-index.htmlを確認してください。

于 2012-09-22T23:20:35.333 に答える
1

まず、:でを実行INSERTsTRANSACTIONます

START TRANSACTION;

INSERT ...

COMMIT;

次に、複数の行を1つのINSERTステートメントにまとめます。

START TRANSACTION;

INSERT INTO table (only,include,fields,that,need,non_default,values) VALUES
(1,1,1,1,1,1,1),
(2,1,1,1,1,1,1),
(3,1,1,1,1,1,1),
...;

COMMIT;

最後に、入力データが適切な形式である場合は、LOAD DATA INFILEよりもパフォーマンスが優れていることがわかります。INSERT

于 2012-08-07T20:45:47.167 に答える
0

たとえば、1つのクエリで複数の挿入を試してみることをお勧めします

INSERT INTO table 
   (title, description) 
VALUES 
   ('test1', 'description1'), 
   ('test2', 'description2'), 
   ('test3', 'description3'), 
   ('test4', 'description4')

または手順を使用してみてください

于 2012-08-07T20:44:06.550 に答える