Door VARCHAR(MAX)
. te gebruiken u zegt in feite tegen SQL Server:"Sla de waarden in dit veld op zoals u het het beste ziet", SQL Server zal dan kiezen of u waarden wilt opslaan als een gewone VARCHAR
of als een LOB (Groot object). In het algemeen, als de opgeslagen waarden kleiner zijn dan 8.000 bytes, behandelt SQL Server waarden als een normale VARCHAR
typ.
Als de opgeslagen waarden te groot zijn, mag de kolom van de pagina naar LOB-pagina's lopen, precies zoals bij andere LOB-typen (text
, ntext
en image
) - als dit gebeurt, zijn extra pagina-lezingen vereist om de gegevens te lezen die zijn opgeslagen op de extra pagina's (d.w.z. er is een prestatie penatly), maar dit gebeurt alleen als de opgeslagen waarden te groot zijn .
In feite kunnen onder SQL Server 2008 of later gegevens overlopen naar extra pagina's, zelfs met gegevenstypen met een vaste lengte (bijv. VARCHAR(3,000)
), maar deze pagina's worden rij-overloopgegevenspagina's genoemd en worden iets anders behandeld.
Korte versie: vanuit een opslagperspectief is er geen nadeel van het gebruik van VARCHAR(MAX)
over VARCHAR(N)
voor sommige N
.
(Merk op dat dit ook geldt voor de andere veldtypen met variabele lengte NVARCHAR
en VARBINARY
)
Ter info:u kunt geen indexen maken op VARCHAR(MAX)
kolommen