2012-01-27 26 views
12

Olası Çoğalt:
is there an advantage to varchar(500) over varchar(8000)?Varchar (5) ve varchar (5000) arasındaki fark?

SQL Server biz alan türünü varchar(n) belirtebilirsiniz:

Depolama boyutu girilen verilerin bayt olarak gerçek uzunluğu, n bayt.

bir veritabanı yapısını planlarken Sık sık bu varchar alanlarda saklanacak olan dizeleri mümkün olan maksimum uzunluğu hayal etmeye çalışın ve ardından set hayal boyut + varchar alan için bazı yedek. Bazen, başlangıçta sağlanan alanın alan için yeterli olmadığı ve daha sonra uzunluğu arttırmam gerektiği ortaya çıkabilir.

Aslında, varchar alanını bir değere sınırlamaya değer mi ve sadece% 100 uygun durumda olan varchar(5000) veya varchar(max) gibi bir şey ayarlamaya değer mi? Ben n uzunluğunda olduğunu sınırlamak zaman herhangi bir avantaj SQL Server veya dizin organizasyonda sayfa organizasyonda belki var mı?

İşte Güncelleme

I (avantajı) demek budur: https://stackoverflow.com/a/5353196/355264

Evet, sorgu iyileştirici sen çok ait varsa, bir sayfa sığacak kaç satır tahmin edebilirsiniz gerekenden daha büyük olan varchar alanlarının SQL Sunucu dahili satır yanlış numara tahmin edebilirsiniz.

yukarıda doğru mu? Ve başka avantajlar var mı? Bir kere

+1

olası iki kopyası varchar (500) varchar (8000) üzerinde bir avantaj var mı?) (http://stackoverflow.com/questions/2009694/is-there-an-advantage-to -varchar500-over-varchar8000) veya [varchar (ma x) her yerde? (http://stackoverflow.com/questions/2091284/varcharmax-everywhere) veya [SQL Server VARCHAR Sütun Genişliği] (http://dba.stackexchange.com/questions/11614/sql-server- varchar-column-width) –

+0

RE: Düzenlemeniz. Buraya bakın [http://stackoverflow.com/questions/2009694/is-there-an-advantage-to-varchar500-over-varchar8000/5654947#5654947) –

cevap

17

- Eğer CAN NOT endeksi boyutunda 900 bayt aşan herhangi sütun.

yalnız O (bana)

.... gerekli değildir bile

Kullanım uygun boyutlu varchar(5000) (veya varchar(max)) her zaman kullanılmasına karşı bir katil kriteridir.

Ayrıca: varchar, en az 2 baytlık ek yük ekler, bu nedenle 10 karakterlik veya daha az dizeler için, bunun yerine her zaman char(n)'u kullanmanızı öneririm.

char(5) depolama 5 bayt kullanır - her zaman. varchar(5), 2 ve 7 bayt depolama alanı kullanır.

+2

Yani aslında varchar (15) olacak verimlilik ve hız açısından "varchar (500)" ile aynı, değil mi? Yani Eğer veri 15-20 bayt (belki daha az veya daha uzun) olacak sanıyorsam, sadece varchar (150) 'belirtebilir miyim? Bu aslında benim asıl sorum. –

+0

"Her zaman" nın ... varchar (500) veya varchar (max) kullanımı arasındaki soru, dizelerin genellikle 10 karakter veya daha az olacağı yönündeki herhangi bir fikri dışlar. –

+1

'char (100)' türünde bir sütun ** her zaman ** tam olarak 100 karakter uzunluğunda olacaktır - yalnızca "Isaac" ini saklasanız bile, tanımlanan uzunluk (100 karakter) ile boşluklarla doldurulur - Bu yüzden gerçekten çok fazla verimsiz olan Isaac .................... '- çok verimsiz olan –

12

MS SQL Server depolar varchar (8000) ve varchar (MAX) farklı kısa.

[büyük değer satırının dışına türleri] OFF olarak ayarlanırsa MAX tipleri Bir tablonun verileri sayfalarının dışına taşınmış ve kendi veri sayfalarına olan hangi boyut şimdi 8.000 bayt olarak sabitlenmiştir

.

Bunun yerine varchar (MAX) (n)

Performans

varchar göre (n) kullanımı varchar kullanırsınız çeşitli nedenleri vardır toplamak vardır daha hızlı http://rusanu.com/2010/03/22/performance-comparison-of-varcharmax-vs-varcharn/

varchar (900) ve daha küçük endeksli edilebilir İndeksleme ancak varchar (MAX) veya varchar (901) veya daha büyük

Uyumluluk

MS SQL Server Compact Edition etmez varchar (MAX)