BLOB は、未解釈のバイト文字列または文字列で、値としてカラムに格納されます。BLOB の一般的な例としては、画像や音声ファイルがあります。BLOB は大きなものが多く、CHAR、VARCHAR、NCHAR、BINARY、VARBINARY などの文字列やバイナリ文字列のデータ型で格納できます。格納する BLOB の内容や長さに応じて、データ型や長さを選択してください。
キャラクタ・ラージ・オブジェクトは一般に CLOB と呼ばれるのに対し、バイナリ・ラージ・オブジェクトは BLOB と呼ばれ、両方を組み合わせたものは LOB と呼ばれます。このマニュアルでは、BLOB という略語のみ使用します。
BLOB 値を格納するカラムを作成する場合は、ストレージの特性を制御できます。たとえば、指定したサイズ以下の BLOB をロー (インライン) に格納し、指定したサイズを超える BLOB をロー外のテーブル拡張ページに格納するよう指定できます。また、ロー外に格納した BLOB については、プレフィクスとも呼ばれる先頭の n バイトをロー内に複製するよう指定できます。このようなストレージ特性は、CREATE TABLE や ALTER TABLE 文で指定された INLINE や PREFIX 設定によって制御されます。これらの設定で指定した値が、パフォーマンスやディスク記憶領域の要件に予期しない影響を与える場合があります。
INLINE と PREFIX のどちらも指定しない場合、あるいは INLINE USE DEFAULT または PREFIX USE DEFAULT を指定した場合、デフォルト値は次のように適用されます。
CHAR、NCHAR、LONG VARCHAR、XML などの文字データ型のカラムの場合、INLINE のデフォルト値は 256 で、PREFIX のデフォルト値は 8 です。
BINARY、LONG BINARY、VARBINARY、BIT、VARBIT、LONG VARBIT、BIT VARYING、UUID などのバイナリ・データ型のカラムの場合、INLINE のデフォルト値は 256 で、PREFIX のデフォルト値は 0 です。
デフォルト値では対応できない特定の要件がある場合を除き、INLINE と PREFIX の値は設定しないようにしてください。デフォルト値は、パフォーマンスとディスク領域の均衡が保たれるよう設定されています。たとえば、INLINE に大きな値を設定し、すべての BLOB をインラインで格納するようにした場合、ローの処理パフォーマンスは低下することがあります。また、PREFIX の値を大きくしすぎると、BLOB の一部を複製したプレフィクス・データのために、BLOB の格納に必要なディスク領域のサイズが増えることになります。
INLINE や PREFIX の値を設定する場合は、INLINE の長さがカラム長を超えないようにしてください。同様に、PREFIX の長さも INLINE の長さを超えないようにしてください。
圧縮されたカラムのプレフィクス・データは圧縮されずに格納されるため、要求を満たすために必要なすべてのデータがプレフィクス内に格納されている場合は、解凍は必要ありません。
INLINE 句と PREFIX 句のデフォルト値については、CREATE TABLE 文を参照してください。
BLOB のサイズがインライン・サイズを超えて、BLOB の格納に 2 ページ以上のデータベース・ページが必要になった場合、データベース・サーバは同じテーブルの別のローから参照できるよう BLOB を格納します。これは BLOB 共有と呼ばれます。BLOB 共有は内部で処理されます。BLOB 共有はデータベース内で不要に BLOB が複製されないようにするためのものです。
BLOB 共有は、特定のカラムに別のカラムと同じ値を設定する場合にのみ発生します。たとえば UPDATE t column1=column2;
のようになります。この例では、column2 に BLOB が含まれている場合に、column1 に BLOB を複製する代わりに、column2 の値を示すように設定します。
BLOB を共有すると、データベース・サーバは BLOB を参照している数を追跡します。データベース・サーバがテーブル内で参照されている BLOB がないと判断すると、BLOB は削除されます。
圧縮されていない 2 つのカラムで BLOB を共有している場合に、一方のカラムを圧縮すると、BLOB は共有でなくなります。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |