Entity Framework Code Firstを使用していくつかのデータベースを作成しています。アプリは正常に動作しており、一般的にCode Firstでできることにはかなり満足しています。私は必然的にプログラマーであり、DBAは2番目です。私はデータベースで何をしたいのかをC#でさらに説明するためにDataAttributesについて読んでいます。私の質問は、これらのnvarchar(max)
文字列をテーブルに入れることでどのようなペナルティを食べるのかということです(下の例を参照)。
この特定のテーブルにはいくつかの列があります。C#では、次のように定義されています。
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string Name { get; set; }
public string Message { get; set; }
public string Source { get; set; }
public DateTime Generated { get; set; }
public DateTime Written { get; set; }
Name、Source、Generated、Writtenに基づいてクエリやソートを行う予定です。NameとSourceの長さは0〜50文字、場合によっては最大150になると予想しています。このテーブルはかなり小さい(<100k行)から始まりますが、時間の経過とともに大幅に増加する(> 1m行)明らかに、メッセージは小さくても大きくてもかまいませんし、おそらく問い合わせることはないでしょう。
私が知りたいことは、名前とソースの列がnvarchar(max)
150文字を超えることは決してないと予想されるときに定義されているパフォーマンスのヒットがありますか?
varchar(max)
どこでも使用するとパフォーマンスが低下します -しないでください!適切なデータ型を使用してください- 本当に 8000文字以上必要な場合にvarchar(max)
のみ使用してください!(人の名前や電子メールがこんなに長いのを見たことはありません!)- VARCHAR(n)を使用するポイントは何ですか?詳細については
[MaxLength]
または[StringLength]
属性を適用する必要があるようです。広すぎるの列のいくつかの追加の可能な負の要因はここに@ PaulWhiteの答えに記載されている