sql >> Database >  >> RDS >> Sqlserver

varchar(max) overal?

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



  1. Hoe tekenreeksvariabele te gebruiken in sql-instructie

  2. SQL #1064 tijdens het gebruik van phpMyAdmin

  3. Voorwaarden voor samenvoegen op meerdere kolommen versus enkele samenvoeging op aaneengeschakelde kolommen?

  4. Hoe werkt memcache met MySQL?