0

私はASP.NET MVC 5 IDを使用しています。私はEFコードで最初にデータベーステーブルを作成することができました。 PasswordHash、SecurityStamp、PhoneNumberはすべてnvarchar(MAX)ですが、コンテンツを見るとかなり短くなります。ASP.NET ID - パフォーマンスコードの最初に生成されたデータベースフィールドの長さ

私の主なDALについては、私はDapperを使用していますが、EFはIdentityを処理させています。

データベースのパフォーマンス上の理由から、これらのMAXフィールドを短くすることができますが、アイデンティティが正しく機能することを保証します。

(私は、フィールドの内容を制御するためPhoneNumberで好きなことをすることができますが、他の2つについてはあまりよく分かりません)。

オンラインでは何も見つかりません。

+3

パフォーマンス上の理由はありますか?それが本当に助けになると思いますか?任意のperf質問のための義務的なリンク:https://ericlippert.com/2012/12/17/performance-rant/ – DavidG

+0

MAXフィールドをたくさん持っているのは良い習慣ではありません。本当に理由がないようです。しかし、あなたがとにかく掛けられているEFを使用しているときはね)perfは「サーバーがそれを取ることができる」だけではなく、「これはより応答性が高い」ことができます。ディスク使用時間。 – niico

+0

あなたはそうですが、何百万人ものユーザーがいるとは思わないので、実際には問題にはなりません。 – DavidG

答えて

0

私はそれがパフォーマンスをお届けしますどのくらい本当にわからないんだけど、あなたは流暢なAPIを使用して、あなたのアイデンティティのプロパティを設定することができます:あなたが持つこれらのフィールドは、互換性のない作る場合

public class YourContext : IdentityDbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     //Make you you do this BEFORE the code below 
     base.OnModelCreating(modelBuilder); 

     //Assuming your user class is called "User" here: 
     modelBuilder.Entity<User>() 
      .Property(e => e.PasswordHash).HasMaxLength(100); 

    } 
} 

は、しかし注意してくださいアイデンティティ・フレームワークが挿入したい値があれば、問題が発生します。だから私は、最大長のためにかなり大きな値をお勧めします。

+0

Thx。これらのフィールドがどれくらい長く必要なのかについての文書はありません。 – niico

+0

どれくらいの時間がかかっている必要はありませんが、これにより詳細が分かるかもしれません。http://stackoverflow.com/questions/20621950/asp-net-identity-default-password-hasher-how-does-it-work-and-それは頭の上にこれをひっくり返す – DavidG

+0

- これをすることに何か利点はありますか?原則として、可能な限り定型的なものに近いものを保つのが好きです。これらの値を変更することに恩恵がほとんどまたはまったくない場合、私はそれらをそのまま残すことを考えています。 – niico

0

SQL Serverの違い(これはあなたが使用していると仮定しています)のパフォーマンスnvarchar(x)vs nvarchar(Max)は、これらのフィールドで検索するときのものです。私。 select * from users where phoneNumber='123456789'

ただし、あなたが言及したフィールドは、標準アイデンティティテンプレートのどこにでもwhere句の対象ではありません。 SecurityStampもありません。確かにPasswordHashにはありません。ユーザーは電子メール、ユーザー名、IDで検索されます。そして、これらの長さにはすでに256文字(see sourceOnModelCreatingまでスクロール)が限られています。インデックスがUserNameカラムに適用されています。

あなたが話しているパフォーマンス上の理由は何でも存在しません。

電子メールで多くの検索を行う場合は、Email列にインデックスを適用することができます。これはパフォーマンス面での効果が得られる程度です。電話番号も同じです。電話番号でユーザーを参照する場合は、その列を限られた長さにしてインデックスを適用するのが理にかなっています。

+0

ありがとうございました - パフォーマンスについてだけでなく、質問の言い方を変えてください。だから基本的にすべてのデフォルトのフィールドの長さに固執するだけでは、実際の世界の短所はないでしょうか? MAXの列だけでなく、nvarchar(256)からnvarchar(100)にメールの長さを変更するなどの方法でも、ほとんど変更はありません。 – niico

+0

実行するだけの理由はありませんそれ。 「各null以外のvarchar(max)またはnvarchar(max)列には、24バイトの追加固定割り当てが必要です」という[documentation](https://msdn.microsoft.com/en)から、ストレージのバイトを節約することができます。 -GB/library/ms186939.aspx)。しかし、どういうわけか私はあなたが本当に24バイトを気にしないと感じます。 – trailmax

+0

"...パーフェクトヒットは小さいので、最大のアプリケーション以外は大したことではありませんが、データがvarchar(n)フィールドに収まることがわかっている場合は、大きなn値を使用する方が良いマックスマックスを使うのはセーフティネットですが、必要がない場合は入れないでください。 <基本的にアイデンティティのデザイナーは怠け者である/ db側で柔軟性を維持していた。これらのほとんどのパーフェクトヒットが追加されます。https://social.msdn.microsoft.com/Forums/sqlserver/en-US/4d9c6504-496e-45ba-a7a3-ed5bed731fcc/varcharmax-vs-varchar255 – niico

関連する問題