MS-SQL-Serverにデータ(>> 1 GB)をインポートする必要があります。いくつかの理由で、このデータをステージングテーブルにインポートする必要があります(ターゲットに直接インポートするのではありません)。ステージングから、データがターゲットテーブルにロードされます。ステージングテーブルのデータは二度と使用されません。私にはいくつかの方法があります:
ソリューションがサーバーの役割によって制限されていない場合:推奨されるソリューションは何ですか?最も堅牢なのはどれですか?
データが不要になった場合、解決策1はおそらくナンセンスです。ソリューション3のパフォーマンスは1と2に比べてはるかに優れていますが、ソリューション4と3の間のパフォーマンスはどうですか?実際には、ロードプロシージャ内のステージングプロセス内のすべてのパラメーターを変更できるので、ソリューション5を選択しますが、データベースを削除して作成する権限が必要です。これは、ロードプロセスではかなり多くなります。したがって、ほとんどの場合、ドロップを使用してステージングテーブルを再作成します。しかし、これは推奨される方法ですか?
推奨される解決策は何ですか?
最も堅牢なのはどれですか? -要件に合ったものをテストします。 dbやテーブル全体を削除しないでください-とにかくそれを再利用しているときに、削除して再作成するポイントは何ですか。
最近、3 GB以上のcsvファイルをSQLサーバーにインポートする必要がありました。以下は、物理マシンで10万行/秒(ハードウェアと環境の違いによるYMMV)を達成するために(SSDと16コアと256GB RAMを使用するVM)では少し少なかった) 。
その他のヒントについては、私の回答を参照してください。
「推奨される方法」は、関連する要素を考慮して最適なソリューションを設計することです。
オプション#1と#2は、不要なI/Oを大量に発生させるため、理想的とは言えません。 #3は何がベストか 最も 状況ですが、I/Oに関する限り、それは#4と大差ありません。したがって、パフォーマンスに関しては、#3と#4は同じであると考えることができます。テーブルを単に切り捨てるのではなく、テーブルを削除または作成するための追加のI/Oは、一般的なデータロードのI/Oと比較して重要ではありません。
あなたのコメントは、ステージングテーブルを頻繁に変更する必要があることを示しているようです。その場合は、#4が最適です。これはステージングテーブルであるため、アクセス許可が複雑になることはほとんどありません。ステージングアカウントが読み取り/書き込み可能な唯一のIDである専用のステージングデータベース内にある場合は、テーブルが許可されているときにアクセス許可を明示的に設定する必要もありません。作成した。
オプション#5は、毎回新しいデータベースを作成する特別な理由がない限り、重要ではありません。