VARCHAR(MAX)/NVARCHAR(MAX)
列が使用される場合、データは行外に格納されることを知っています...
実際には、を使用して設定large value types out of row
できるオプションの設定によって異なりますsp_tableoption
。ドキュメントから:
デフォルトでは、のためにあるMAX
の値を保存するには、行、彼らが収まる場合は、8000のバイトまで、。sp_tableoption
デフォルトの変更に使用していない限り、MAX
データはおそらく行内に格納されます。
とはいえ、MAX
8000バイトを超えない値のデータ型を使用することはお勧めできません。代わりに非MAX型を使用してください。MAX
SQL Serverは最大2GBのサイズのデータを処理できるように準備する必要があるため、他のものとは別に、型を処理するときのパフォーマンスはしばしば著しく低下します。
各フィールドは行外に格納されていますか、それとも最大のものだけですか?
MAX
ものだけ。さらに、以前に行内にあったMAX
列が行外に移動された場合、その行のその列のみが影響を受けます。それは、行外のLOB
構造へのポインターによって行内で置き換えられます。MAX以外の列が行外に移動される場合もあります。
レコード全体を読み取るためにテーブルのクラスター化インデックスを使用している場合、行から格納されているフィールドも読み取られますか?
クラスタ化インデックスのスキャンは、行内データのみを走査します。クエリに行外データが必要な場合は、行内ポインタを使用して検索されます。