ホームページ  >  記事  >  データベース  >  ステートメントへの挿入を最適化するためのヒントを共有する

ステートメントへの挿入を最適化するためのヒントを共有する

零下一度
零下一度オリジナル
2017-05-18 15:49:333165ブラウズ

ステートメントのパフォーマンス分析を実現するための 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");

3 番目の方法

: 最適化された SQL ステートメントを使用する: SQL ステートメントを結合し、insert into table () を使用します。値 (),(),(),() を入力してから、すべてを一度に挿入します。文字列が長すぎる場合は、 MYSQL を設定して、mysql コマンドラインで実行する必要があります: set global max_allowed_pa​​cket = 2 * 1024*1024*10; 消費時間は: 11:24:06 11:25:06;

200 万個のテスト データを挿入するのに 1 分しかかかりませんでした。 コードは次のとおりです:

echo date("H:i:s");
$connect_mysql->query(&#39;BEGIN&#39;);
$params = array(&#39;value&#39;=>&#39;50&#39;);
for($i=0;$i<2000000;$i++){ 
$connect_mysql->insert($params);
if($i%100000==0){
$connect_mysql->query(&#39;COMMIT&#39;);
$connect_mysql->query(&#39;BEGIN&#39;);
}
}
$connect_mysql->query(&#39;COMMIT&#39;);
echo date("H:i:s");
最後に、データの大きなバッチを挿入する場合、最初の方法は間違いなく最悪ですが、2 番目の方法は実際のアプリケーションでより広く使用されており、3 番目の方法はテスト データやその他の要件が低い場合に適しており、非常に高速です。

【関連する推奨事項】

1. 1 つの挿入ステートメントで複数のレコードをバッチで挿入するチュートリアルを共有します

2. mysql でよく使用される 3 つの挿入ステートメントとその違いの分析

以上がステートメントへの挿入を最適化するためのヒントを共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。