0

C# 側から: データベースに 20 行以上を挿入するための複数の挿入ステートメントを送信するか、単一の文字列に挿入ステートメントを積み上げてその SQL 文字列を実行します。どちらがより効率的ですか? 長所と短所は何ですか?

例えば:

for(int i=0;i<21;i++)
{
      //Insert command here  
}

また

string qry="Insert into table1 () values "
for(int i=0;i<21;i++)
{
  qry+="(values)";
}
4

3 に答える 3

2

一括挿入操作を実行しようとしている場合は、この特定の操作用に最適化されたSqlBulkCopyクラスを確認することをお勧めします。代わりに、データ挿入のさまざまな方法の相対的なパフォーマンスに興味がある場合-テーブル値パラメーターを使用した私の実験から、大量のアドホック挿入ステートメントと比較して非常に高いパフォーマンスが得られました-それらの多くは「バッチ挿入」です、あなたが言ったように。

簡単に言えば、データとスキーマを使用して、何が最善かを測定する必要があります。しかし、TVP と sqlbulkcopy クラスをお勧めします。

于 2013-04-02T23:06:27.270 に答える
0

大量の挿入を送信する場合は、効率が大幅に向上するトランザクションを使用する必要があります。

BEGIN;
INSERT .... ;
INSERT .... ;
INSERT .... ;
INSERT .... ;
INSERT .... ;
COMMIT;

よりもはるかに効率的で、著しく高速です。

INSERT .... ;
INSERT .... ;
INSERT .... ;
INSERT .... ;
INSERT .... ;
于 2013-04-02T23:05:24.397 に答える
-1

私は2つの方法を使用します(エンティティフレームワーク外)。前述のように、5000 を超える大量のレコードがある場合は、SqlBulkCopy を使用します。それより速いものはありません。データテーブルを使用するため、オブジェクトを操作するときは最適ではありません。

ビジネス オブジェクトで使用するもう 1 つのオプションは XML です。私たちのビジネス オブジェクトには、xml を生成する serialize メソッドがあります。次に、次のようなストアド プロシージャがあります。文字列を渡すだけよりもサブコストが高くなりますが、構文が正しいこと、列名が正しいことなどを確認するSQLサーバーが必要です。さらに、SQLサーバーは実行計画をキャッシュします。文字列を渡すと、変更を加えるときにタイプミスや問題が発生しやすくなります。

@xDoc XML

INSERT INTO dbo.Test(Id,Txt)
SELECT Data.Id,Data.Txt
FROM
(SELECT
    X.Data.value('Id[1]', 'int') AS Id,
    X.Data.value('Txt[1]', 'tinyint') AS Txt
FROM @xDoc.nodes('MyRootNode/MyRecord') AS X(Data)) AS Data;
于 2013-04-03T00:12:05.197 に答える