我有一些使用“实体框架代码优先”创建的数据库;应用程序正常运行,总的来说,我对Code First的功能感到非常满意。根据需要,我首先是一名程序员,然后是DBA。我正在阅读有关DataAttributes的内容,以在C#中进一步描述我想要数据库做什么;我的问题是:将这些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; }
我希望根据名称,来源,生成的和书面查询和/或排序。我希望“名称和源”的长度为0至50个字符,偶尔最多为150个字符。我希望此表的开头很小(<100k行),但随着时间的推移会显着增长(> 1m行)。显然,消息可能大小不一,可能不会被查询。
我想知道,是否将我的“名称”和“源”列定义为nvarchar(max)
当我从未期望它们大于150个字符时对性能产生影响?
varchar(max)
随处使用都会损害您的表现 -请勿这样做!使用适当的数据类型- varchar(max)
仅在确实需要超过8000个字符时才使用!(我从未见过这么长的人的名字或电子邮件!)-请参见再使用VARCHAR(n)有什么意义?有关更多信息
[MaxLength]
或[StringLength]
属性。@PaulWhite的答案在此处提到了