質問: connection.BeginTransaction()) { // (...) x inserted here, we want to insert the items next... connection.Execute(TSQL_InsertStatement, x.Items, transaction); transaction.Commit(); } ``` * ローカル(vs a。\ SQLEXPRESS)の場合、実行には300〜500 [ms] * Azureでは、実行には〜8 [s] 私はこのアクションが個々のINSERTを大量に生成すると信じており、これは問題かもしれません。私は4x INSERT(1k、1k、1k、500行)を生成した "手動生成SQL"ソリューションにこれをリファクタリングしようとしましたが、実行はローカルで2 [s]でした。 * Dapperを使ってこれをもっと速く走らせる方法はありますか?バルクインサートのように? * 私がSQL Azureで気付いていないことはありますか?いくつかの隠された抑制のように?
回答: Azure SQLデータベースでは、同じトランザクション内で複数の挿入を使用するのは一般的には悪い考えです。 バッチ処理を使用して挿入クエリのパフォーマンスを向上させる必要があります( https://azure.microsoft.com/en-us/documentation/articles/sql-database-use-batching-to-improve-performance/) 。可能であれば、テーブル値のパラメータ、一括挿入または複数パラメータの挿入をお勧めします。これらのシナリオについては、参照先の記事で説明しています。 Azure SqlデータベースにはJSONサポートも含まれているので、元のソースがJSONオブジェクトの配列であれば、JSON全体をテキストとしてプッシュし、OPENJSONを使用してSQL側で解析することができます(他の方法よりも速いという証拠はまだありません)。