私はプロジェクトでデータベースを作成する責任があります。私たちはめったに値を持たないフィールド(10,000レコードごとに1つ)を持っているので、これをデータベースに格納するための最良の方法を模索しています。
私が見る限り、私には3つのオプションがあります:
検討していない他のオプションはありますか?
私はそれぞれの方法の長所と短所を調べようとしています。私の知る限りでは、1が最も簡単で、2は最小のスペースしかとれませんが、3のリソースをたくさん見つけるのに苦労しています。
必要なのは スパース列 および フィルターされたインデックス であり、オプション1を使用します。これらは、完全にこのシナリオで完全にサポートおよび文書化されている機能です。
SQL Serverデータベースエンジンは、列定義でSPARSEキーワードを使用して、その列の値の格納を最適化します。したがって、テーブルの任意の行の列値がNULLの場合、値はストレージを必要としません。
このシナリオでXMLソリューションがうまく機能するとは想像できません。冗長なメタデータのオーバーヘッドが大きくなり、クエリが遅くなります。
SQL Serverで可変長の場合、null許容列にはnoスペースが必要です。 NULLであることは NULLビットマップ に格納されます。必要に応じて filtered index を使用してインデックスを作成できるため、NULL列を無視できます。
ポイント1を考慮すると、複雑さが増します。
しないでください。検索、解析などが難しい:あなたは後でこれを後悔します
これはサイズにも依存します。これは数十億行のchar(1000)になりますか?または10万行のtinyint?後者がポイント2の追加された複雑さを考慮した場合、それだけの価値はありません。
SQL Server 2008では、スパース列を使用する追加のオプションがあります。これは、あなたが言及した状況のために特別に設計されています。
これらには、XML COLUMN_SETを使用して結合されたXMLオブジェクトとして表示したり、個別に参照したりできるため、スペースを大幅に節約できるという利点もあります。
詳細については、次のブログ記事をご覧ください。 http://www.sqlskills.com/BLOGS/PAUL/post/SQL-Server-2008-Sparse-columns-and-XML-COLUMN_SET.aspx