1. ホーム
  2. sql

[解決済み] なぜvarchar(max)を使用しないのですか?

2023-06-25 19:57:32

質問

私はデータベースの設計に関しては少し古い人間なので、カラムに正しいデータサイズを使用することに完全に賛成です。しかし、友人のためにデータベースを見直したとき、彼が varchar(max) を多用していることに気づきました。 そこで私がすぐに考えたのは、そのデータベースを本人に投げ返して、変更するように言うことでした。 しかし、その後考えてみたところ、彼がそれを使用しない正当な理由を思いつきませんでした (彼はケース型ツールを使用して DB を生成していました。)。

というトピックを調査していたのですが varchar(max) の使い方について調べてみたのですが、彼がこれを使わないという正当な理由が思いつきません。

彼はインデックスにカラムを使用せず、データベース上にあるアプリケーションは入力に制限があるため、フィールドに大量のエントリーを許可しません。

彼に光を見出させるために、どんな助けでも感謝します。)

どのように解決するのですか?

これに対する私の答えは、VARCHAR(max) vs TEXTの理由と同じくらい、Maxの使用法についてではありません。

私の考えでは、まず第一に、英語のテキスト以外は絶対にエンコードしない、人々が外国の地名を参照することはないと確信できない限り、NVARCHARまたはNTEXTを使用すべきです。

第二に、それはフィールドがあなたにできることです。

TEXTはVARCHARに比べて更新が大変ですが、Full Text Indexingの利点やたくさんの賢いことを得ることができます。

一方、VARCHAR(MAX)には曖昧さがあり、セルのサイズが< 8000charsであれば、Rowデータとして扱われます。それ以上の場合は、LOBとして扱われ、保存されます。 これはRBARを問い合わせないと分からないので、データについて確信が必要な場所や、何回読み込むとコストがかかるかなどの最適化戦略があるかもしれません。

そうでなければ、もしあなたの使い方が比較的平凡で、データのサイズに問題があることが予想されない場合(IEは.Netを使っているので、文字列/char*オブジェクトのサイズを気にする必要がない)、VARCHAR(max)を使うことは問題ないでしょう。