文字列であるテーブル用のフィールドがいくつかありますが、現時点では、ほとんどのフィールドサイズにかなりの文字数制限があります。たとえば、ストリート名は100文字です。大きなフィールドサイズを使用するとペナルティはありますか?たとえば、このフィールドの制限を30文字に変更した場合、サイズによってパフォーマンスが向上するか、効率が向上しますか?収縮の候補となる可能性のある約50のフィールドがあります。
あなたの提案をありがとう。
文字列であるテーブル用のフィールドがいくつかありますが、現時点では、ほとんどのフィールドサイズにかなりの文字数制限があります。たとえば、ストリート名は100文字です。大きなフィールドサイズを使用するとペナルティはありますか?たとえば、このフィールドの制限を30文字に変更した場合、サイズによってパフォーマンスが向上するか、効率が向上しますか?収縮の候補となる可能性のある約50のフィールドがあります。
あなたの提案をありがとう。
回答:
あなたが話している場合varchar
とnvarchar
全くその後、高いフィールドの長さを可能にするためのペナルティはありません。
ただし、次の点に注意してください。
CHAR
。 Varchar(2)
たとえば、CHAR(2)
常に2を使用しながら、実際には1行あたり2〜4バイトを使用します。「実際に格納されている値よりも大きいフィールドサイズを宣言すると、ペナルティはありますか?」という場合、varcharと宣言されていれば、答えはノーです。私が知っているすべてのSQL DBエンジンは、データで実際に指定された文字数(および長さの値)のみを格納します。したがって、フィールドをvarchar(100)として定義し、その中に10文字しか格納しない場合、ディスク上で10文字しか使用できません(長さは2バイト程度)。疑問がある場合、私は日常的にvarcharフィールドを途方もなく大きくします。
「長い文字フィールドを保存するとペナルティはありますか」という意味であれば、答えは「はい」です。今日のディスク容量は安価ですが、無料ではないので、理由もなくそれを無駄にしたくないでしょう。おそらくもっと重要なことですが、ディスクからデータを読み取るには時間がかかるため、データフィールドが長いほど、プログラムは遅くなります。フィールドにインデックスが付けられている場合、すべての読み取りでキー値をこの大きな長いフィールドと比較する必要があるため、検索が実際に遅くなる可能性があります。
ユーザーにビッグデータ入力フィールドを与えると、遅かれ早かれそのフィールドを使用することに注意してください。
そうは言っても、私は小さすぎるのではなく大きすぎるのではないかと思います。ユーザーが実際のデータを利用可能なフィールドに収めることができないため、ユーザーがその場で略語を発明することを強制したくないほどディスク容量は安価です。私が今日取り組んでいるシステムには、製品の説明フィールドが小さすぎて、製品の実際の名前の多くには小さすぎるため、ユーザーは省略しなければなりません。もちろん、ユーザーごとに略称が異なるため、同じことを言うには20通りの方法があります。
実際にテーブルに格納されるものよりも大きいフィールドサイズを宣言してもペナルティがないと主張する人は誰でも間違っています。データの実際のサイズ(およびその2バイトのオーバーヘッド)は実際に格納されるものですが、実行プランに関する限り、見積もりを決定するために使用されるのは列定義です。したがって、10文字の値を格納するようにvarchar(1000)を宣言すると、12文字のディスク領域しか消費されませんが、実行計画の見積もりは、操作を許可するメモリの量とメモリ内でのみ操作を実行できるかどうか、またはtempdbドライブ領域も必要かどうか。列をvarchar(1000)にすることはできますが、エンジンは、格納されているすべての値がvarchar(10)よりも実際に小さいことを認識していません。