У меня есть несколько баз данных, созданных с использованием Entity Framework Code First; приложения работают, и в целом я очень доволен тем, что мне позволяет Code First. Я программист первый, а второй администратор по необходимости. Я читаю о 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. Я ожидаю, что эта таблица будет довольно маленькой (<100 тыс. Строк), но со временем значительно увеличится (> 1 млн. Строк). Очевидно, что сообщение может быть маленьким или большим, и, вероятно, не будет запрашиваться.
Что я хочу знать, есть ли снижение производительности для моих столбцов «Имя» и «Источник», которые определяются, nvarchar(max)
когда я никогда не ожидаю, что они будут длиннее 150 символов?
varchar(max)
везде повредит вашей производительности - не делайте этого! Используйте соответствующие типы данных - используйте varchar(max)
ТОЛЬКО, если вам действительно нужно более 8000 символов! (Я никогда не видел, чтобы имя человека или адрес электронной почты были такими длинными!) - Смотрите, в чем смысл использования VARCHAR (n)? для получения дополнительной информации
[MaxLength]
или[StringLength]
атрибуты. Некоторые дополнительные возможные негативные факторы слишком широких столбцов упоминаются в ответе @ PaulWhite здесь