Önce Entity Framework Code kullanılarak oluşturulan bazı veritabanlarım var; uygulamalar çalışıyor ve genel olarak Kod İlkenin yapmamı sağladığı şeyden oldukça memnunum. Zorunlu olarak önce bir programcı ve bir de DBA saniyesiyim. Veritabanının ne yapmasını istediğimi C # 'da tanımlamak için DataAttributes hakkında okuyorum; ve sorum şu: bu nvarchar(max)
ipleri masamda bulundurarak ne ceza alacağım (aşağıdaki örneğe bakın)?
Bu özel tabloda birkaç sütun var; C # 'de şöyle tanımlanırlar:
[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; }
İsim, Kaynak, Üretilmiş ve Yazılı olarak sorgulamayı ve / veya sıralamayı bekliyorum. Ad ve Kaynak'ın 0-50 karakter uzunluğunda, bazen 150'ye kadar olmasını bekliyorum. Bu tablonun oldukça küçük başlamasını (<100k satır), ancak zamanla önemli ölçüde (> 1m satır) büyümesini bekliyorum. Açıkçası, mesaj küçük veya büyük olabilir ve muhtemelen sorgulanmayacaktır.
Bilmek istediğim, Adı ve Kaynak sütunlarımın, nvarchar(max)
150 karakterden daha büyük olmalarını asla beklemeyeceğim şekilde tanımlanması gibi bir performans etkisi var mı?
varchar(max)
her yeri kullanmak performansınıza zarar verir - yapmayın! Kullanım uygun kullanımını - datatypes varchar(max)
SADECE eğer gerçekten fazla 8000 karakter gerekiyor! (Hiç kimsenin adını veya e-postasını o kadar uzun zamandır görmedim!) - Bkz . VARCHAR (n) Artık Kullanmanın Amacı Nedir? daha fazla bilgi için
[MaxLength]
veya[StringLength]
özellikleri uygulamanız gerekiyor gibi görünüyor . Çok geniş sütunların bazı olası olumsuz faktörleri burada @ PaulWhite'nin cevabında belirtilmiştir