Ich habe einige Datenbanken mit Entity Framework Code First erstellt. Die Apps funktionieren und im Allgemeinen bin ich ziemlich zufrieden mit dem, was ich mit Code First machen kann. Ich bin erstens ein Programmierer und zweitens ein Datenbankadministrator. Ich lese über DataAttributes, um in C # näher zu beschreiben, was die Datenbank tun soll. und meine Frage ist: Welche Strafe esse ich, wenn ich diese nvarchar(max)
Saiten in meinem Tisch habe (siehe Beispiel unten)?
Diese Tabelle enthält mehrere Spalten. In C # sind sie wie folgt definiert:
[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; }
Ich erwarte, basierend auf Name, Quelle, generiert und geschrieben abzufragen und / oder zu sortieren. Ich erwarte, dass Name und Quelle zwischen 0 und 50 Zeichen lang sind, gelegentlich bis zu 150. Ich erwarte, dass diese Tabelle recht klein anfängt (<100.000 Zeilen), aber mit der Zeit erheblich wächst (> 1 Mio. Zeilen). Offensichtlich kann die Nachricht klein oder groß sein und wird wahrscheinlich nicht abgefragt.
Was ich wissen möchte, gibt es einen Leistungstreffer für meine Namen- und Quellenspalten, nvarchar(max)
wenn ich nie erwarte, dass sie länger als 150 Zeichen sind?
varchar(max)
überall zu verwenden schadet deiner Leistung - tu es nicht! Verwenden Sie geeignete Datentypen - verwenden Sie varchar(max)
NUR, wenn Sie WIRKLICH mehr als 8000 Zeichen benötigen! (Ich habe noch nie gesehen, dass der Name oder die E-Mail-Adresse einer Person so lang ist!) - Siehe Was bringt es, VARCHAR (n) noch einmal zu verwenden? Für weitere Informationen
[MaxLength]
oder anwenden[StringLength]
. Einige zusätzliche mögliche negative Faktoren für zu breite Spalten werden in der Antwort von @ PaulWhite hier erwähnt