Tengo algunas bases de datos creadas usando Entity Framework Code First; las aplicaciones funcionan y, en general, estoy bastante contento con lo que Code First me permite hacer. Soy un programador primero, y un DBA segundo, por necesidad. Estoy leyendo sobre DataAttributes para describir mejor en C # lo que quiero que haga la base de datos; y mi pregunta es: ¿qué penalidad estaré comiendo al tener estas nvarchar(max)
cadenas en mi mesa (ver ejemplo a continuación)?
Hay varias columnas en esta tabla en particular; en C # se definen como tales:
[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; }
Espero consultar y / u ordenar según el Nombre, Fuente, Generado y Escrito. Espero que Nombre y Fuente tengan una longitud de 0-50 caracteres, ocasionalmente hasta 150. Espero que esta tabla comience bastante pequeña (<100k filas), pero crezca significativamente con el tiempo (> 1m filas). Obviamente, el mensaje puede ser pequeño o grande, y probablemente no será consultado.
Lo que quiero saber, ¿hay un impacto de rendimiento para mis columnas de Nombre y Fuente que se definen como nvarchar(max)
cuando nunca espero que tengan más de 150 caracteres?
varchar(max)
todas partes perjudica su rendimiento , ¡no lo haga! Use los tipos de datos apropiados: ¡ Úselo varchar(max)
SOLO si REALMENTE necesita más de 8000 caracteres! (¡Nunca he visto el nombre o el correo electrónico de una persona tan largo!) - Vea ¿Cuál es el punto de usar VARCHAR (n)? para más información
[MaxLength]
o[StringLength]
atributos. Algunos posibles factores negativos adicionales de columnas demasiado anchas se mencionan en la respuesta de @ PaulWhite aquí