2009-05-14 1 views
4

私は値が1であるいくつかのフィールドを持つテーブルを持っています。0このテーブルは非常に長い時間外になります。パフォーマンスのために異なるデータ型を使用するのにビットデータ型を使用するのが良いのでしょうか?もちろん、すべてのフィールドにインデックスを付ける必要があります。SQL ServerのBITフィールドの方がintフィールドより高速ですか?

答えて

2

公式ビットは、特にnullを許可しない場合、最も高速になります。実際には、大きな用途であってもそれは問題ではないかもしれません。しかし、値が0または1のみになる場合は、少し使用しないでください。値が2や-1のような無効なものでいっぱいにならないようにする最善の方法のように聞こえます。

7

パフォーマンスに関する統計情報を提供することはできませんが、データを最もよく表すタイプを常に使用する必要があります。必要なものが1-0であれば、絶対にビットフィールドを使用してください。

あなたのデータベースに与える情報が多くなればなるほど、それは「推測」の権利を得る可能性が高くなります。

0

私が理解しているように、ビット列を格納するにはまだバイトが必要です(ただし、1バイトに8ビットの列を格納できます)。だから、これらのビット列の数が多いと(何くらい)、記憶容量が少なくて済むでしょうか。 Yishaiが言ったように、おそらくパフォーマンスの違いはほとんどありません(ただし、アプリケーションコードのほうが論理的にはうまくいきます)。

この列の2つのオプションが決して変更されないことを100%信頼できると言える場合は、必ずビットを使用してください。しかし、将来的に第3の価値が現れるのを見ることができれば、その日が小さなものを使うようになると、人生は少し楽になるかもしれません。

ちょっと考えましたが、大部分の行が一方または他方の側に向いていない限り、この列でどれくらいのインデックスが役立つかわかりません。おおよそ50/50のディストリビューションでは、実際にインデックスを最新の状態に保ちながら、テーブルを照会する際のヒット数よりも多くのヒットを得るかもしれません。

+1

SQL Serverの古いバージョンでこれが当てはまるかどうかは不明ですが、実際には[MSDN](https://msdn.microsoft.com/en-us/library/ms177603.aspx)によれば、「BIT」フィールド真に単一ビットを使用するが、テーブルのすべての「BIT」列は、8ビットの倍数を強制的に使用する必要がある。 – Sushruth

関連する問題