TEXT
and VarChar(MAX)
are non-Unicode large variable length character data type, which can store maximum of 2,147,483,647 non-Unicode characters (i.e. maximum storage capacity is: 2GB).
As per MSDN, Microsoft is suggesting to avoid using the TEXT
datatype and it will be removed in a future version of SQL Server. VarChar(MAX)
is the suggested data type for storing large string values instead of the TEXT
data type.
- In-Row or Out-of-Row Storage
TEXT
型列のデータは、別の LOB データ ページの行外に格納されます。テーブル データ ページの行には、実際のデータが存在する LOB データ ページへの 16 バイトのポインタしかありません。タイプ列のデータは、VarChar(MAX)
8000 バイト以下の場合、行内に格納されます。列の値VarChar(MAX)
が 8000 バイトを超える場合、VarChar(MAX)
列の値は別の LOB データ ページに格納され、行には、実際のデータが存在する LOB データ ページへの 16 バイトのポインターのみが含まれます。したがって、「行内」VarChar(MAX)
は検索と取得に適しています。
一部の文字列関数、演算子、および構文は型列では機能しませんが、TEXT
型列では機能しVarChar(MAX)
ます。
=
VarChar(MAX)
型列の等値演算子
GROUP BY
VarChar(MAX)
タイプ列の句
ご存知のように、VarChar(MAX)
型列の値は、値の長さが 8000 バイトを超える場合、または行に十分なスペースがない場合にのみ、行外に格納されます。それ以外の場合は、行内に格納されます。そのため、列に格納されている値のほとんどVarChar(MAX)
が大きく、行外に格納されている場合、データ取得の動作はTEXT
型列とほとんど同じになります。
型の列に格納されている値のほとんどがVarChar(MAX)
行内に格納できるほど小さい場合、LOB 列の値が同じデータの行内に格納されるため、LOB 列が含まれていないデータを取得するには、より多くのデータ ページを読み取る必要があります。非 LOB 列の値が格納されるページ。ただし、クエリに LOB 列が含まれている場合は、型の列SELECT
と比較して、データを取得するために読み取るページが少なくて済みます。TEXT
結論
パフォーマンスを向上させるのVarChar(MAX)
ではなく、データ型を使用してください。TEXT
ソース