[解決済み] なぜvarchar(max)を使用しないのですか?
質問
私はデータベースの設計に関しては少し古い人間なので、カラムに正しいデータサイズを使用することに完全に賛成です。しかし、友人のためにデータベースを見直したとき、彼が
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)を使うことは問題ないでしょう。
関連
-
[解決済み] あるテーブルから、別のテーブルに存在しないすべてのレコードを選択するにはどうすればよいですか?
-
[解決済み] Oracle Trigger ORA-04098: トリガーが無効で、再バリデーションに失敗しました。
-
[解決済み] カラムの変更:NULLをNOT NULLに変更する
-
[解決済み] INNER JOINよりもCROSS APPLYを使用すべきなのはどのような場合ですか?
-
[解決済み] T-SQLでnot equalには!=と<>のどちらを使うべきですか?
-
[解決済み] SQL Serverで結果をページ分割する最も良い方法は何ですか?
-
[解決済み] 項目xにアクセスできるように文字列を分割するにはどうすればよいですか?
-
[解決済み】複数カラムのSQL MAX?
-
[解決済み】なぜ歴史的に人々はデータベースのフィールドの大きさに256ではなく255を使うのですか?
-
[解決済み】SQLでVARCHARよりCHARを選択するユースケースは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
executeQuery()ソリューションでデータ操作文を発行できない。
-
[解決済み] LINQでInclude()は何をするのですか?
-
[解決済み] テーブルネーミングのジレンマ:単数形と複数形の名前【非公開
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み] mysqldumpで特定のテーブルをスキップする
-
[解決済み] ある列の最大値を持つ行を取得する
-
[解決済み] フラットテーブルをツリーにパースする最も効率的/エレガントな方法は何ですか?
-
[解決済み] 複数の列に対してSELECT DISTINCTする方法(またはできる方法)は?
-
[解決済み] Postgres でサブクエリを使用してテーブルの行を更新する
-
[解決済み] varchar(500)はvarchar(8000)よりも優れているのでしょうか?