2010-09-10 28 views
21

Varchar (500) vs varchar (max) kullanırken performans, bellek ve göz önünde bulundurulması gereken başka şeyler açısından avantajları ve eksileri nedir bilmek ister misiniz?arasındaki fark varchar (500) vs varchar (max) sql sunucusunda

  • Her ikisi de aynı miktarda depolama alanı kullanır mı?

SQL Server 2000/2005/2008 durumunda yanıt farklı mıdır?

+2

[Buraya başka bir fark için cevabımı bakın] (http://stackoverflow.com/questions/2009694/is-there-an-advantage-to-varchar500-over-varchar8000/5654947#5654947) ve bu blog gönderisi [ tarafından Remus Rusanu] (http: // rusanu.com/2010/03/22/performans karşılaştırması-varcharmax-vs-varcharn /) –

+0

Bağlantıya bakın: http://stackoverflow.com/q/28980502/1805776 – vicky

cevap

29

SQL Server 2000 ve SQL Server 7'de, bir satır boyut olarak 8000 bayttan fazla olamaz. Bu, bir VARBINARY sütununun yalnızca 8000 bayt depolayabileceği (bir tabloda tek sütun olduğunu varsayarak), bir VARCHAR sütununun 8000 karaktere kadar saklayabileceği ve bir NVARCHAR sütununun 4000 karaktere kadar saklayabildiği anlamına gelir (unicode karakteri başına 2 bayt). Bu sınırlama, veriyi diske kaydetmek için SQL Server'ın kullandığı 8 KB'lik dahili sayfa boyutundan kaynaklanmaktadır.

Daha fazla veriyi tek bir sütunda saklamak için, depolanan veri sayfalarından ayrı olarak 8 KB veri sayfasının bir koleksiyonunda bulunan TEXT, NTEXT veya IMAGE veri türlerini (BLOB) kullanmanız gerekir. diğer veriler aynı tabloda. Bu veri sayfaları bir B-ağacı yapısında düzenlenmiştir. BLOB'lar çalışmak ve manipüle etmek zordur. Bir yordamda veya bir işlevde değişken olarak kullanılamazlar ve REPLACE, CHARINDEX veya SUBSTRING gibi dize işlevlerinde kullanılamazlar. Çoğu durumda, BLOB'ları işlemek için READTEXT, WRITETEXT ve UPDATETEXT komutlarını kullanmanız gerekir.

Bu sorunu çözmek için Microsoft, SQL Server 2005'te VARCHAR (MAX), NVARCHAR (MAX) ve VARBINARY (MAX) veri türlerini tanıttı. Bu veri türleri, BLOB'ların tutabileceği aynı miktarda veriyi tutabilir (2 GB) ve diğer veri türleri için kullanılan aynı tip veri sayfalarında saklanırlar. MAX veri türündeki veriler 8 KB'yi aştığında, bir aşırı akış sayfası kullanılır. SQL Server 2005, sayfaya otomatik olarak bir aşırı akış göstergesi atar ve veri satırlarını diğer veri türlerini de manipüle ettiği şekilde nasıl değiştireceğini bilir. Saklı yordam veya işlev içinde MAX veri türlerinin değişkenlerini bildirebilir ve hatta bunları değişken olarak geçirebilirsiniz. Bunları ayrıca dize işlevlerinde de kullanabilirsiniz.

Microsoft, SQL Server 2005'te BLOB'lar yerine MAX veri türlerini kullanmanızı önerir. Gerçekte, BLOB'lar SQL Server'ın gelecekteki sürümlerinde kullanımdan kaldırılmaktadır.

Kredi: SQL Server http://www.teratrax.com/articles/varchar_max.html


ve SQL Server , VARCHAR (MAX) için maksimum depolama boyutu 2^31-1 bayt (2147483647 bayt veya 2GB - 1 bayt). Depolama boyutu, + 2 bayt olarak girilen gerçek veri uzunluğudır. Girilen veriler 0 karakter uzunluğunda olabilir. VARCHAR veri türündeki her karakter bir bayt kullandığı için, bir VARCHAR (MAX) veri türü için maksimum uzunluk 2,147,483,645'tir. sizin için

Tam İlginç okuma: http://www.sql-server-helper.com/faq/sql-server-2005-varchar-max-p01.aspx

Referans: http://msdn.microsoft.com/en-us/library/ms143432.aspx

+1

+1 Çok ayrıntılı yanıt. –

+0

Ekleyeceğim tek şey, 2000 sınırlamaları - bir başka deyişle, birden fazla varchar sütununuz varsa, onların kombine uzunluğu, Paul ile katılıyorum 8000 –

+0

'u geçemez, başka bir şey varchar (500)) uzunluk ile otomatik sınırlandırılır ve varchar (max) durumunda bu değildir. taht da iyi. bir şey daha, sql sunucusunda depolamak için sadece 500 karaktere ihtiyacımız var iken kayıtları eklerken bellek ayırmak için her durumda varchar (500) veya varchar (max) kullanmak için yararlı olacak mı? –

2

A VARCHAR(MAX) sütun VARCHAR(500) sütunda ise 501 karakter veya daha fazla bir değeri kabul edecektir olmaz. Bu nedenle, 500 karaktere sınırlayan bir işletme kuralınız varsa, VARCHAR(500) daha uygun olacaktır.