Używając w VARCHAR(MAX)zasadzie polecenia SQL Server „przechowuj wartości w tym polu, jak widzisz najlepiej”, SQL Server zdecyduje, czy przechowywać wartości jako zwykłe, VARCHARczy jako LOB (duży obiekt). Ogólnie rzecz biorąc, jeśli przechowywane wartości są mniejsze niż 8 000 bajtów, program SQL Server będzie traktował wartości jako VARCHARtyp zwykły .
Jeżeli wartości zapisane są zbyt duże, wówczas kolumna może rozlać się na stronie w celu stron LOB, dokładnie tak samo jak w przypadku innych typów LOB ( text, ntexti image) - jeśli tak się stanie wtedy dodatkowe Odczyty są wymagane do odczytywania danych zapisanych w dodatkowe strony (tzn. występująca wydajność), jednak dzieje się tak tylko wtedy, gdy zapisane wartości są zbyt duże .
W rzeczywistości w SQL Server 2008 lub nowszym dane mogą przelewać się na dodatkowe strony, nawet w przypadku typów danych o stałej długości (np. VARCHAR(3,000)), Jednak strony te nazywane są stronami danych przepełnienia wierszy i są traktowane nieco inaczej.
Krótka wersja: z punktu widzenia przechowywania nie ma wady używania VARCHAR(MAX)przez VARCHAR(N)niektórych N.
(Zwróć uwagę, że dotyczy to również innych typów pól o zmiennej długości NVARCHARi VARBINARY)
Do Twojej wiadomości - nie możesz tworzyć indeksów w VARCHAR(MAX)kolumnach