ステートメントのパフォーマンス分析を実現するための MYSQL バッチ挿入データベース
テーブル構造が次のとおりであると仮定します
コードは次のとおりです
CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ) NOT NULL, value VARCHAR( 50 ) NOT NULL, other_value VARCHAR( 50 ) NOT NULL )
通常、次のように単一の挿入 SQL ステートメントを記述します:
コードは次のとおりです
INSERT INTO example (example_id, name, value, other_value) VALUES (100, 'Name 1', 'Value 1', 'Other 1');
Mysql では、1 つの SQL で SQL ステートメントを書くことができます。ステートメントにデータをバッチ挿入する、次の SQL ステートメントです。
コードは次のとおりです
INSERT INTO example (example_id, name, value, other_value) VALUES (100, 'Name 1', 'Value 1', 'Other 1'), (101, 'Name 2', 'Value 2', 'Other 2'), (102, 'Name 3', 'Value 3', 'Other 3'), (103, 'Name 4', 'Value 4', 'Other 4');
挿入する列の順序が、テーブル内の列を削除する場合は、列名の定義を省略することもできます。次の SQL
コードは次のとおりです
INSERT INTO example VALUES (100, 'Name 1', 'Value 1', 'Other 1'), (101, 'Name 2', 'Value 2', 'Other 2'), (102, 'Name 3', 'Value 3', 'Other 3'), (103, 'Name 4', 'Value 4', 'Other 4');
上記で問題ないようです。SQL ステートメントの最適化に関するいくつかのヒントを使用します。以下で個別にテストします。目標は、200 万個のデータを空のデータ テーブルに挿入することです。挿入するには、insert into を使用します。最後の表示は次のとおりです。 23:25:05 01:32:05、つまり 2 時間以上かかったということです!
2 番目の方法: トランザクション送信を使用してデータベースにバッチ挿入します (100,000 アイテムごとに送信)。最後に表示された時間は: 22 です。 :56:13 23:04:00、合計 8 分 13 秒 コードは次のとおりです:
$params = array('value'=>'50'); set_time_limit(0); echo date("H:i:s"); for($i=0;$i<2000000;$i++){ $connect_mysql->insert($params); }; echo date("H:i:s");
: 最適化された SQL ステートメントを使用する: SQL ステートメントを結合し、insert into table () を使用します。値 (),(),(),() を入力してから、すべてを一度に挿入します。文字列が長すぎる場合は、 MYSQL を設定して、mysql コマンドラインで実行する必要があります: set global max_allowed_packet = 2 * 1024*1024*10; 消費時間は: 11:24:06 11:25:06;
200 万個のテスト データを挿入するのに 1 分しかかかりませんでした。 コードは次のとおりです: 【関連する推奨事項】 1. 1 つの挿入ステートメントで複数のレコードをバッチで挿入するチュートリアルを共有します 以上がステートメントへの挿入を最適化するためのヒントを共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。echo date("H:i:s");
$connect_mysql->query('BEGIN');
$params = array('value'=>'50');
for($i=0;$i<2000000;$i++){
$connect_mysql->insert($params);
if($i%100000==0){
$connect_mysql->query('COMMIT');
$connect_mysql->query('BEGIN');
}
}
$connect_mysql->query('COMMIT');
echo date("H:i:s");