Entity Framework Code First를 사용하여 생성 한 데이터베이스가 있습니다. 앱이 작동하고 일반적으로 Code First가 할 수있는 일에 매우 만족합니다. 필자는 우선 프로그래머이고 DBA는 두 번째입니다. 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; }
이름, 소스, 생성 및 작성을 기반으로 쿼리 및 / 또는 정렬 할 것으로 예상합니다. 이름과 소스는 0-50 자 길이, 때로는 최대 150 자까지 예상합니다.이 테이블은 아주 작게 시작 (100 만 행 미만)하지만 시간이 지남에 따라 크게 증가합니다 (> 1m 행). 분명히 메시지는 작거나 클 수 있으며 쿼리되지 않을 것입니다.
내가 알고 싶은 것은 이름과 소스 열이 nvarchar(max)
150 자보다 클 것으로 예상하지 않을 때 정의되는 성능 저하가 있습니까?
varchar(max)
어디서나 사용하면 성능이 저하 됩니다.하지 마십시오! 사용하여 적절한 사용 - 데이터 유형을 varchar(max)
만 당신이하면 정말 8000 개 이상의 문자를 필요로한다! (저는 사람의 이름이나 전자 우편을 본 적이 없습니다!)- VARCHAR (n) 사용의 요점은 무엇입니까 ?를 참조하십시오 . 더 많은 정보
[MaxLength]
또는[StringLength]
속성 을 적용해야하는 것 같습니다 . 너무 넓은 열 몇 가지 추가 부정적인 요인은 여기 @ PaulWhite의 대답에 언급