3

テーブルのデザインをしています。互いに無関係なビット列がいくつかあります。

これらの列を一般的な ATTRIBUTES INT ビット マスク列にマージすることを検討しています。

今、私はこれが悪い考えだと自分自身に納得させようとしています。アンチパターンのようです。後で別のビット列が必要になった場合、時間を節約できるかもしれませんが、それ以上の利点はありますか?

ビット マスクにインデックスがあり、ATTRIBUTES & 128 = 128 で検索している場合、効率的ではないと思われます。インデックスでは、すべてがビット単位ではなく、値全体で順序付けられます。したがって、どこに行くべきかを正確に知るのではなく、実際にはインデックス全体をスキャンする必要があると思います。

そうですか?これは恐ろしい考えですか?

ありがとう、テダーツ

4

1 に答える 1

4

ビットマスク列を使用すると、

  • コードの読み取りと保守が困難
  • インデックス使用不可

また、データベース設計の通常の形式にも違反しています。

SQL Server は複数のビット列を 1 バイトに圧縮できるため、スペースを購入する必要もありません。

ただし、当然のことながら、ビット列はあまり選択的ではないため、ここでもインデックスの使用は有利ではない可能性があります。

全体として、シングル ビット列の利点は、ビットマスク列の利点を明らかに上回ります。したがって、ほとんどの場合、シングル ビット列を使用します。

于 2012-10-11T22:31:16.480 に答える