質問: 私は、データベースにできるだけ効率的に挿入したいという、絶えず入ってくる大量のデータ(毎分約10,000分)を持っています。現時点では、準備された挿入ステートメントを使用していますが、SqlBulkCopyクラスを使用してデータをより大きなチャンクにインポートすることを検討しています。 問題は、私が単一のテーブルに挿入するのではなく、データ項目の要素が多数のテーブルに挿入され、そのID列が同時に挿入される他の行の外部キーとして使用されることです。私は大量のコピーがこのような複雑な挿入を許すものではないことを理解していますが、uniqueidentifierカラムのIDカラム(この場合はbigints)を交換する価値があるのだろうかと思います。これにより、各テーブルに対して大量のコピーを2つ作成できます。挿入前にIDを特定できるため、SCOPE_IDENTITYなどのバルクコピーを使用できないことを確認する必要はありません。 これは実行可能な解決策のように聞こえるのでしょうか、それとも私が直面するかもしれない他の潜在的な問題がありますか?または、データをすばやく挿入できる別の方法はありますか?bigint ID列を保持していますか? ありがとう。
回答: 「SQLは[bigint identity()カラム]代理キーを「データ準備ルーチンがGUID代理キーをアサート」方法で交換することを計画しているようです。言い換えれば、キーはSQL内ではなく外部SQLから割り当てられます。あなたのボリュームを考えると、データ生成プロセス*が*代理キー*を*割り当てる*ことが*できれば、私は間違いなくそれに行きます。 次に、GUIDを使用する必要がありますか、またはデータ生成プロセスによって自動インクリメント整数が生成されるのですか?一貫して確実に動作するプロセスを作成するのは難しいですが(SQL Serverに$$$を支払う理由の1つですが)、データベース内のより小さくて人間が見やすいキーのトレードオフが価値があるかもしれません。