C# クライアントを使用した SQL Server での一括挿入の最適化
SQL Server データベースに大量のデータを挿入するときにパフォーマンスの問題が発生していますSqlClient.SqlBulkCopy を使用します。プロセスを最適化するには、次の解決策を検討してください。
-
主キーを無効にする: 挿入中に主キーを削除すると、データベースでインデックスの整合性を維持する必要がなくなるため、パフォーマンスが大幅に向上します。各行の挿入中に。インポートが完了したら、キーを再度有効にします。
-
一時テーブルを使用: ターゲット テーブルと同じスキーマを持つ一時テーブルを作成することを検討してください。一時テーブルにデータを一括挿入し、転送トリガーを使用して定期的に行をメインテーブルに転送します。これにより、インポート プロセス中のメイン テーブルのサイズが比較的小さく保たれます。
追加の考慮事項:
-
非クラスター化インデックス注: 順次データ アクセスが重要ではない場合は、インポート中にクラスター化インデックスの代わりに非クラスター化主キー インデックスを使用することを検討してください。これにより、データをより効率的に挿入できるようになります。
-
リモート データ生成: データがリモート マシンで生成されている場合は、一括挿入プロセスをリモート マシンの 1 つに移動することを検討してください。ネットワーク オーバーヘッドを削減します。
-
同時クエリを無効にする: インポート中にターゲット テーブルに対する同時クエリがないことを確認します。ブロックの問題を回避します。
追加リソース:
- [無効化/有効化]インデックス](https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-index-transact-sql?view=sql-server-ver15)
- [一括読み込み比較](https://dba.stackexchange.com/questions/141254/some-bulk-loading-speed-comparisons)
- [SqlBulkCopy最適化](https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlbulkcopy-methods?view=sql-server-2017)
- [表ヒント](https://docs.microsoft.com/en-us/sql/t-sql/queries/hints/table-hints-transact-sql?view=sql-server-ver15)
- [入れるステートメント](https://docs.microsoft.com/en-us/sql/t-sql/statements/insert-transact-sql?view=sql-server-ver15)
以上がC# を使用して SQL Server への一括挿入を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。