適用対象: Windows |Windows Server
長い値の列
ESE 列の型JET_coltypLongTextとJET_coltypLongBinaryは、長い値の列型と呼ばれます。 これらの列は、大きな文字列および大きなバイナリ オブジェクトであり、プライマリ インデックスから離れた別の B+ ツリーに格納できます。 長い値がプライマリ レコードとは別に格納されている場合、長い値 ID (LID) とバイト オフセットに対して内部的にキーが設定され、ストリームとしてアクセスされます。 JetAddColumn の呼び出しで長い値の列がテーブルに追加され、JET_COLUMNDEF構造体の coltyp メンバーが JET_coltypLongText または JET_coltypLongBinary に設定されます。 長いテキストまたは長いバイナリ列の値の最大サイズは 2 GB -1 です。
ESE では、長い値の列に対する追加、バイト範囲の上書き、およびサイズ設定の操作がサポートされ、これらの列型に対する効率的なストリーム実装がサポートされます。 既定では、長い値データが 1024 バイトを超える場合、または長い値データがレコードに格納されている場合にレコードが 1 つのデータベース ページに収まらない場合は、別の B+ ツリーに格納されます。 アプリケーションには、長い値のデータをレコードに格納するオプション (JET_bitSetIntrinsicLV) を設定するか、別の B+ ツリー (JET_bitSetSeparateLV) に強制的に格納するオプションを設定することで、既定の動作をオーバーライドするオプションがあります。 これらの値は、JetSetColumn の grbit パラメーター、または JetSetColumns の呼び出しで使用される grbit メンバー JET_SETCOLUMN次のように設定されます。
Append: (JET_bitSetAppendLV)
バイト範囲の上書き: (JET_bitSetOverwriteLV)
サイズの設定: (JET_bitSetSizeLV)
[強制的に分離]: (JET_bitSetSeparateLV)
レコードに格納: (JET_bitSetIntrinsicLV)
long 値データは、長い値 BLOB へのオフセットと、BLOB 内の長い値データの長さを示すことによって設定されます。 long 値 BLOB へのオフセットは、JET_SETINFO構造体の ibLongValue メンバー (JetSetColumn の場合) またはJET_SETCOLUMN構造体の ibLongValue メンバー (JetSetColumns の場合) に設定されます。 jetSetColumn の呼び出しで、JET_SETCOLUMN の pvData メンバーとpvData パラメーターには、長い値のデータが含まれています。 長い値の列への更新は、トランザクション内で実行する必要があります。
長い値のデータは、アプリケーションがJET_bitSetSeparateLVまたはJET_bitSetIntrinsicLVを設定する場合、常に別のテーブルに格納されます。それ以外の場合はヒューリスティックに決定されます。 ESE では、長い値が 1024 バイトを超える場合、またはレコードに格納されている場合は 1 つのデータベース ページにレコードが収まらない場合は、長い値が区切って格納されます。
次の図は、別のテーブルに格納されている長い値のデータを示しています。 長い値がレコードの外部に格納されると、その値を参照するために新しい長い値の ID が作成されます。 これにより、複数のレコードが同じ列値を参照できるようになります。 データ内の複数のレコードが同じ長い値のデータを指している場合、データへの参照カウントが増加します。
ESE では、複数のレコードが同じ大きなバイナリ オブジェクトを参照できるようにする 1 つのインスタンス ストア機能もサポートされています。各レコードには情報の独自のコピーが含まれています。したがって、列値データのコピーが重複しないようにします。 この機能は、 jetPrepareUpdate の呼び出しで有効になっており、 prep パラメーターに JET_prepInsertCopy オプションが設定されています。