TEXT
i VarChar(MAX)
są typami danych o dużej długości o zmiennej długości, które nie obsługują kodu Unicode, i które mogą przechowywać maksymalnie 2147483647 znaków bez kodu Unicode (tzn. maksymalna pojemność to 2 GB).
Zgodnie z linkiem MSDN Microsoft sugeruje, aby unikać używania typu danych Text i zostanie on usunięty w przyszłych wersjach Sql Server. Varchar (Max) jest sugerowanym typem danych do przechowywania dużych wartości ciągu zamiast typu danych Text.
- Pamięć w rzędzie lub poza rzędem
Dane Text
kolumny typu są przechowywane poza wierszem na osobnych stronach danych LOB. Wiersz na stronie danych tabeli będzie miał tylko 16-bajtowy wskaźnik do strony danych LOB, na której znajdują się rzeczywiste dane. Podczas gdy dane Varchar(max)
typu kolumna jest przechowywana w rzędzie, jeśli jest mniejsza lub równa 8000 bajtów. Jeśli wartość kolumny Varchar (maks.) Przekracza 8000 bajtów, wówczas wartość kolumny Varchar (maks.) Jest przechowywana na osobnych stronach danych LOB, a wiersz będzie miał tylko 16-bajtowy wskaźnik do strony danych LOB, na której znajdują się rzeczywiste dane. Tak więc In-Row
Varchar (Max) jest dobry do wyszukiwania i pobierania.
- Obsługiwane / nieobsługiwane funkcje
Niektóre funkcje łańcuchowe, operatory lub konstrukcje, które nie działają na kolumnie typu Tekst, ale działają na kolumnie typu VarChar (Max).
=
Równa się operatorowi w kolumnie typu VarChar (Max)
Grupuj według klauzuli w kolumnie typu VarChar (Max)
- Uwagi dotyczące systemu IO
Jak wiemy, wartości kolumn typu VarChar (Max) są przechowywane poza wierszem tylko wtedy, gdy długość wartości, która ma być w nim zapisana, jest większa niż 8000 bajtów lub nie ma wystarczającej ilości miejsca w wierszu, w przeciwnym razie będzie przechowywana to w rzędzie. Jeśli więc większość wartości przechowywanych w kolumnie VarChar (Max) jest duża i przechowywana poza wierszem, zachowanie pobierania danych będzie prawie podobne do zachowania w kolumnie Typ tekstu.
Ale jeśli większość wartości przechowywanych w kolumnach typu VarChar (Max) jest wystarczająco mała, aby przechowywać w rzędzie. Następnie wyszukiwanie danych, w których nie uwzględniono kolumn LOB, wymaga odczytania większej liczby stron danych, ponieważ wartość kolumny LOB jest przechowywana w wierszu na tej samej stronie danych, na której przechowywane są wartości kolumn inne niż LOB. Ale jeśli wybrane zapytanie zawiera kolumnę LOB, wymaga mniejszej liczby stron do odczytania w celu pobrania danych w porównaniu do kolumn typu Tekst.
Wniosek
Użyj VarChar(MAX)
typu danych zamiast TEXT
dobrej wydajności.
Źródło