Чрез използване на VARCHAR(MAX)
вие всъщност казвате на SQL Server „съхранявайте стойностите в това поле, както виждате най-добре“, след това SQL Server ще избере дали да съхранява стойностите като обикновен VARCHAR
или като LOB (Голям обект). По принцип, ако съхранените стойности са по-малки от 8000 байта, SQL Server ще третира стойностите като обикновен VARCHAR
вид.
Ако съхранените стойности са твърде големи, тогава колоната може да прехвърли страницата в LOB страници, точно както се прави за други типове LOB (текст
, ntext
и изображение
) - ако това се случи, тогава са необходими допълнителни четения на страници, за да се прочетат данните, съхранени в допълнителните страници (т.е. има производителност наред), но това се случва само ако съхранените стойности са твърде големи .
Всъщност при SQL Server 2008 или по-нова версия данните могат да препълват към допълнителни страници дори с типовете данни с фиксирана дължина (напр. VARCHAR(3,000)
), обаче тези страници се наричат страници с данни за препълване на редове и се третират малко по-различно.
Кратка версия: от гледна точка на съхранението няма недостатък в използването на VARCHAR(MAX)
над VARCHAR(N)
за някои N
.
(Имайте предвид, че това се отнася и за другите типове полета с променлива дължина NVARCHAR
и VARBINARY
)
FYI – Вие не можете да създавате индекси на VARCHAR(MAX)код> колони