2009-06-02 8 views
0

どの方が効率的ですか?mysqlの性能比較

タイプ1:

insert into table_name(column1,column2..) select column1,column2 ... from another_table where 

columnX in (value_list) 

タイプ2:

insert into table_name(column1,column2..) values (column1_0,column2_0..),(column1_1,column2_1..) 

初版が短く見え、VALUE_LISTが含まれている場合に、第2は、500のまたはそれ以上の値を言う、非常に長くなる場合があります。

しかし、最初の方が効率的で直感的になるはずですが、パフォーマンスは良くなるとは思いません。

答えて

2

最初のものは、特にあなたのカラムが既にmysqlにある場合(私があなたが言っていると思っているのですか?)、クリーナーです。ネットワークのオーバーヘッドにデータを送信して時間を節約するために時間を節約し、クライアントの問合せサイズの上限をどれくらい減らしても心配する必要はありません。

しかし、一般的には、よく索引付けされたテーブルでは、数値の行が大きくなるほどパフォーマンスがよくなると思います。大量のクエリを使用する挿入のほとんどは、インデックスの作成(hereを参照)などの作業を行うのに費やされ、インデックスを使用しない場合は両方のクエリがそれを行う必要があります。

+0

私はこれを+1したいと思いますが、あなたの666の担当者を壊したくありません。 ;) –

+0

ああ、誰かがすでにやった。今私は下院議場に行かなければならない –

0

私はToddに同意します。最初のクエリはより洗練されており、MySQLサーバーへの送信が高速になり、コンパイルがより高速になります。挿入されたレコードの数が増えると、速度差が小さくなることは事実です。

しかし最初のフォームは考慮すべきかなりの他の利点があります。

  • それは維持するためにはるかに簡単です:あなただけのすべての今してフィールドを追加または変更する必要があります。
  • another_tableにクエリを実行し、結果を処理して2番目のクエリ(そのアプローチの隠れたコスト)を連結するのは避けてください。
  • この更新プログラムを複数回実行する必要がある場合、最初のクエリは、コンパイルされたフォームとクエリプランと共にMySQLサーバーにキャッシュされます。これにより、クエリの後続の呼び出しが少し速く実行されます。