Ho creato alcuni database usando prima Entity Framework Code; le app funzionano e in generale sono abbastanza contento di ciò che Code First mi permette di fare. Per prima cosa sono un programmatore e un secondo DBA. Sto leggendo su DataAttributes per descrivere ulteriormente in C # cosa voglio che faccia il database; e la mia domanda è: quale penalità dovrò mangiare avendo queste nvarchar(max)
stringhe nella mia tabella (vedi esempio sotto)?
Ci sono diverse colonne in questa particolare tabella; in C # sono definiti come tali:
[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; }
Mi aspetto di eseguire una query e / o ordinare in base a Nome, Origine, Generato e Scritto. Mi aspetto che Nome e Sorgente abbiano una lunghezza di 0-50 caratteri, a volte fino a 150. Mi aspetto che questa tabella inizi abbastanza piccola (<100k righe), ma cresca in modo significativo nel tempo (> 1m righe). Ovviamente il messaggio potrebbe essere piccolo o grande e probabilmente non verrà interrogato.
Quello che voglio sapere, c'è un hit di performance per le mie colonne Nome e Sorgente che vengono definite come nvarchar(max)
quando non mi aspetto che siano più grandi di 150 caratteri?
varchar(max)
dappertutto danneggia la tua performance - non farlo! Usa i tipi di dati appropriati : usa varchar(max)
SOLO se hai davvero bisogno di più di 8000 caratteri! (Non ho mai visto il nome o l'e-mail di una persona così a lungo!) - Vedi qual è lo scopo di usare VARCHAR (n) Anymore? per maggiori informazioni
[MaxLength]
o più[StringLength]
attributi. Alcuni possibili ulteriori fattori negativi di colonne troppo larghe sono menzionati nella risposta di @ PaulWhite qui