2009-02-27 10 views
39

は、それがより効率的なサイズの2対が別の番号の動力としてvarcharフィールドを使用することですか? SQL Serverのデフォルトは50ですから、私は考えていません。varcharフィールド - 2の威力はより効率的ですか?

しかし、2のべき乗であるサイジングフィールドは、偶数バイトと同等であるため、効率的ですプロセスはビット&バイトです。

したがって、varchar(32)またはvarchar(64)と宣言されたフィールドは、varchar(50)よりも実際のメリットがありますか?

答えて

38

、2つのサイズのパワーを持つ構造体を使用するためのいくつかの利点は、あなたが別なパワーの内側にこれらの素敵な(2の累乗)数を収めることができる主な理由があります2つの大きさの構造体である。しかし、これはDBフィールドのサイズには当てはまりません。

VARCHARに関連する唯一の2乗の大きさは、varchar(またはいくつかのSQL方言ではTEXT/BLOB)の正確なタイプです。256より小さい場合は、1バイトを使用して長さを示すことができます。 65536(64KB)未満の場合は2バイトで十分です.3バイトは16777216(16MB)まで、4バイトは4294967296(4GB)になります。

また、VARCHAR(50)は、どちらもn + 1バイトの記憶域が必要であるため、VARCHAR(255)と同じ高価であると主張できます。これが発生するための一つの可能​​な場所は、行のメモリー内形式になり

のUnicodeのことを考えて前にです。もちろん、

...

21

私はいつも私たちはオタクだとそれは我々が何をすべきかだから、人々はvarchar型のフィールドの2の累乗を選択思いました。少なくともそれは私がいつもしてきたことです。

0

これは、特定のデータベースの実装に依存しますが、私はそれが期待していません。文字数の計算は一般的に行われていないので、パフォーマンスには影響しません。あなたが特定の最大長を使用してから表示されます

3

のみ有形利益はVARCHARのために必要な記憶領域です。最大長が255を超えると、各行に値の長さを格納するために余分なバイトが必要になります(長さが256^2以上の場合は余分な2バイトなど)。一般的に、SQLについては

4

?いいえ、特定の実装については、おそらく。

(SQLは単なる仕様です)仕様によって決定されていない方が効率的ですが、何それは特定のDBMSに実装されていますか。いくつかの他の用途で

+0

... 2^n個の長さは、アライメントオフセットの必要性を減らす必要があります。通常、小さな効果、私は疑う。 – dmckee

+1

メモリの位置合わせは、倍数で行われ、倍精度では行われません。 32ビット整列アーキテクチャでは、最良のバイトオフセットは4×nです。 – Juliano

関連する問題