J'ai créé des bases de données en utilisant Entity Framework Code First; les applications fonctionnent et en général, je suis assez satisfait de ce que Code First me permet de faire. Je suis d'abord programmeur, puis DBA par nécessité. Je lis sur DataAttributes pour décrire plus en C # ce que je veux que la base de données fasse; et ma question est: quelle peine vais-je manger en ayant ces nvarchar(max)
cordes dans ma table (voir l'exemple ci-dessous)?
Il y a plusieurs colonnes dans ce tableau particulier; en C # ils sont définis comme tels:
[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; }
Je m'attends à interroger et / ou trier en fonction du nom, de la source, du généré et de l'écrit. Je m'attends à ce que le nom et la source soient dans la longueur de 0 à 50 caractères, parfois jusqu'à 150. Je m'attends à ce que ce tableau commence assez petit (<100 000 lignes), mais augmente considérablement au fil du temps (> 1 m de lignes). De toute évidence, le message peut être petit ou grand et ne sera probablement pas contesté.
Ce que je veux savoir, y a-t-il un impact sur les performances de mes colonnes Nom et Source nvarchar(max)
lorsque je ne m'attends pas à ce qu'elles dépassent 150 caractères?
varchar(max)
partout nuit à votre performance - ne le faites pas! Utilisez les types de données appropriés - utilisez varchar(max)
UNIQUEMENT si vous avez VRAIMENT besoin de plus de 8 000 caractères! (Je n'ai jamais vu le nom ou l'adresse e-mail d'une personne aussi longue!) - Voir Quel est l'intérêt d'utiliser VARCHAR (n) de plus? pour plus d'informations
[MaxLength]
ou[StringLength]
. Certains autres facteurs négatifs possibles de colonnes trop larges sont mentionnés dans la réponse de @ PaulWhite ici