質問: 私はSQL Server 2008に数百万行のテーブルを保持しており、初期設計は次のようになります。 ``` Code nvarchar(50) PK Available bit validUntil DateTime ImportID int ``` ユーザーは、sqlbulkcopyを使用してデータを挿入する際に、100,000個の奇数コードを一度にインポートできます。また、特定のImportIDに対して一度に最大10,000のコードのバッチを要求することもできます。また、要求日がValidUntilの日付よりも遅く、コードが利用可能である限り、バッチを要求できます。 私の質問は、これらのコードをすべて1つのテーブルに保持し、インデックスを使用するか、または1つのテーブルを2つのAvailableCodesとUsedCodesに分割する方がよいでしょう。コードが要求されると、AvailableCodesテーブルからUsedCodesテーブルAvailableフラグを使用する代わりに?そうすれば、AvailableCodesテーブルは時間の経過と共に利用可能なコードよりも1つのテーブルのように大量になることはなく、監査目的で受け入れることに煩わされることはありません。 また、テーブルが分割されている場合、コードは両方のテーブルで一意である必要があるため、sqlbulkcopyを使用することはできますか?
回答: 私は1つのテーブルでそれを作成し、よく定義されたインデックスを作成します。 フラグ列のフィルタインデックスを考えてみましょう。これは、t-sqlのwhere節とssmsのフィルタページで行われます。