数時間連続して実行されるphpスクリプトがあり、数秒ごとにデータベースに保存する新しいデータがあります。したがって、新しいデータが利用可能になったときに保存するか、配列に収集して100または500になったら保存するかを選択できます。正しい場合、phpはデータベースに複数の挿入クエリを送信できないため、上記の2つのオプションが必要になります。まったく同じ時間を節約できます。
私は間違っていますか、それとも一方が他方よりも速いですか?おそらく、これらよりも速い3番目の解決策がありますか?
数時間連続して実行されるphpスクリプトがあり、数秒ごとにデータベースに保存する新しいデータがあります。したがって、新しいデータが利用可能になったときに保存するか、配列に収集して100または500になったら保存するかを選択できます。正しい場合、phpはデータベースに複数の挿入クエリを送信できないため、上記の2つのオプションが必要になります。まったく同じ時間を節約できます。
私は間違っていますか、それとも一方が他方よりも速いですか?おそらく、これらよりも速い3番目の解決策がありますか?
次の構文を使用して、一度に複数の行を挿入できます。
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は、大量のデータをインポートするのに非常に効率的であることがわかりました。
どちらも速くはありません。ただし、一括挿入を使用して挿入をトランザクションでラップすると、大幅に高速になります。
BEGIN TRANSACTION;
INSERT INTO ...
INSERT INTO ...
INSERT INTO ...
COMMIT;
これは、storangeエンジンがトランザクションを許可する場合にのみ機能します。したがって、MyISAMの代わりにInnoDBを使用することをお勧めします。
オフラインバッチストアドプロシージャオプションをお勧めします。このようにして、次のことを行います。
rgds。