sql >> Database teknologi >  >> RDS >> Sqlserver

varchar(max) overalt?

Ved at bruge VARCHAR(MAX) du siger grundlæggende til SQL Server "gem værdierne i dette felt, hvordan du ser bedst", SQL Server vil derefter vælge, om værdierne skal gemmes som en almindelig VARCHAR eller som en LOB (Stor objekt). Hvis de lagrede værdier er mindre end 8.000 bytes, vil SQL Server generelt behandle værdier som en almindelig VARCHAR type.

Hvis de lagrede værdier er for store, får kolonnen lov til at sprede sig fra siden til LOB-sider, præcis som de gør for andre LOB-typer (tekst , ntekst og billede ) - hvis dette sker, kræves der yderligere sidelæsninger for at læse de data, der er gemt på de ekstra sider (dvs. der er en ydeevne næsten), dog dette sker kun, hvis de lagrede værdier er for store .

Faktisk kan data under SQL Server 2008 eller nyere flyde over på yderligere sider, selv med datatyperne med fast længde (f.eks. VARCHAR(3.000) ), men disse sider kaldes rækkeoverløbsdatasider og behandles lidt anderledes.

Kort version: fra et lagerperspektiv er der ingen ulempe ved at bruge VARCHAR(MAX) over VARCHAR(N) for nogle N .

(Bemærk, at dette også gælder for de andre felttyper med variabel længde NVARCHAR og VARBINARY )

FYI - Du kan ikke oprette indekser på VARCHAR(MAX) kolonner



  1. PHP/MySQL - algoritme for topbedømte

  2. MySQL Connector/C++ OS X 10.9 Mavericks og XCODE 5.0.2

  3. Opret forbindelse til MySQL direkte fra en iPad-app (ikke via PHP osv.)

  4. Sådan indlæses data i mysql-tabel, men ignorer de tomme linjer