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, VARCHAR
czy 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 VARCHAR
typ 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
, ntext
i 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 NVARCHAR
i VARBINARY
)
Do Twojej wiadomości - nie możesz tworzyć indeksów w VARCHAR(MAX)
kolumnach