2009-09-02 9 views
0

ですか?インデックス/照会などの面で他のパフォーマンスよりも優れているのは、データベースフィールドの比較/パフォーマンス(int)vs char(1)

列を宣言 アクティブシャアは、(1) 'Y'/'N' の値で値1/0

と 対is_active tinyint型が逸話的にほとんどの場所を話すと、人々がchar(1)を使用することを好むようだ 私のに対し、傾向は、使用するのが簡単であるため、/ tinyint/intとして宣言することです。

実績比較はありますか? oracle(ビットマップ索引など)のバイナリ値索引のようなものを思い出してください。sql2005/sql2008/...のようなものがありますか?

UPDATE - 以下のコメントのいくつかに応じて、パフォーマンスはインデックスクエリ/更新の用語で定義されるだろう、ストレージが、それはあまりにも関係ありません

セマンティクス十分に安いです考えると無関係です!

答えて

3

CHAR/VARCHARとの任意の列は、索引付け時などの文字翻訳/照合、平等テストのセマンティクスのために余分な内部コードのすべてをあなたに送信する可能性、などがあります

ので、数優れている。 ビットは、あなたが記述した場合に最適なソリューションです。0または1だけを格納します(そして、もちろんnullを指定できます)。

SQL Serverのあなたは、複数のビットフィールドを持っている場合、それはtinyint型よりも効率的であるので、各バイトの8ビットのフィールドまで記憶するために内部崩壊ビットフィールドもしません:

http://msdn.microsoft.com/en-us/library/ms177603.aspx

+0

ビットフィールドは索引付けできません。したがって、クウェリングには役に立たないので、tinyint/smallint/int/bigintカラムのセマンティクスの問題も発生します。 – Kumar

+0

ビットフィールドをインデックス化することはできますが、値が2つしかないため、ビットフィールドはほとんど役に立ちません。他の種類の列に2つの値を格納して索引付けすると、その索引はパフォーマンスが低下します。 – richardtallent

+0

詳細情報: http:// stackoverflow。com/questions/231125/should-i-index-a-bit-field-in-sql-server – richardtallent

1

にはありますOracleの整数型または論理型。ビットマップ索引は、他のデータ型の列値から派生したものとは異なるものです。

0

すべてのRDBMS製品がブール型のデータ型をサポートしていればいいでしょう。それから、この質問を殺すことができます。それは個人的な味わいになります。私は...それが簡単に理解することが

if is_active = 'Y' then 

...ではなく...

if is_active = 1 then 

を見つけるしかし、私は代わりに英語でフランス語を話した場合、私は一方で、それはO/Nになりたいです1/0の実装は普遍的です。重要なことは、システム全体で1つの規約を使用することです。

パフォーマンスに関しては、最大のボトルネックがchar(1)と整数の違いであれば、チューニングの腕前に敬意を表します。

+0

システムがまだ実装されていないのでボトルネックではありません...しかし、これはリアルタイムのリスク管理アプリケーションのためのものです。 – Kumar

関連する問題