2

数時間連続して実行されるphpスクリプトがあり、数秒ごとにデータベースに保存する新しいデータがあります。したがって、新しいデータが利用可能になったときに保存するか、配列に収集して100または500になったら保存するかを選択できます。正しい場合、phpはデータベースに複数の挿入クエリを送信できないため、上記の2つのオプションが必要になります。まったく同じ時間を節約できます。

私は間違っていますか、それとも一方が他方よりも速いですか?おそらく、これらよりも速い3番目の解決策がありますか?

4

3 に答える 3

2

次の構文を使用して、一度に複数の行を挿入できます。

INSERT INTO foo
( a, b, c)
VALUES
( 1, 2, 3),
( 4, 5, 6),
( 7, 8, 9)

または、取得時にデータを区切りファイルにダンプし、ファイル内の行が100行程度になったら、LOAD DATA INFILE(http://dev.mysql.com/doc/refman/5.5/en/)を使用します。 load-data.html)を使用して、挿入を実行します。LOAD DATA INFILEは、大量のデータをインポートするのに非常に効率的であることがわかりました。

于 2012-06-02T13:58:44.220 に答える
0

どちらも速くはありません。ただし、一括挿入を使用して挿入をトランザクションでラップすると、大幅に高速になります。

BEGIN TRANSACTION;
INSERT INTO ...
INSERT INTO ...
INSERT INTO ...
COMMIT;

これは、storangeエンジンがトランザクションを許可する場合にのみ機能します。したがって、MyISAMの代わりにInnoDBを使用することをお勧めします。

于 2012-06-02T13:47:58.680 に答える
0

オフラインバッチストアドプロシージャオプションをお勧めします。このようにして、次のことを行います。

  • それ以外の場合は、すべてのスクリプト呼び出しで発生する接続時間を保存します(そうだと思いますが、スクリプトが表示されませんでした)
  • phpとmysql間の通信時間を節約する
  • すべてのデータがSQLエンジン内で一度に処理されるため、解析解釈を保存します

rgds。

于 2012-06-02T19:19:24.253 に答える