ヒープ構造

ヒープとはクラスタ化インデックスを使用しないテーブルのことです。ヒープは、そのヒープが使用するパーティションにつき 1 行を sys.partitions に持っています。その行では、index_id の値が 0 と等しくなります。既定では、ヒープのパーティションは 1 つです。ヒープにパーティションが複数ある場合、各パーティションは、そのパーティションのデータを保持するヒープ構造になります。たとえば、ヒープに 4 つのパーティションがある場合、4 つのヒープを持つ構造になります。この場合、パーティションごとに 1 つのヒープがあります。

ヒープ内のデータ型によっては、各ヒープ構造に 1 つ以上のアロケーション ユニットが含まれ、そこに特定のパーティションのデータが格納され、管理されます。各ヒープには、パーティションごとに、少なくとも 1 つの IN_ROW_DATA アロケーション ユニットがあります。また、ヒープにラージ オブジェクト (LOB) 列が含まれている場合は、パーティションごとに 1 つの LOB_DATA アロケーション ユニットもあります。さらに、行サイズの上限である 8,060 バイトを超える可変長列が含まれている場合は、パーティションごとに 1 つの ROW_OVERFLOW_DATA アロケーション ユニットがあります。アロケーション ユニットの詳細については、「テーブルとインデックスの編成」を参照してください。

sys.system_internals_allocation_units システム ビューの first_iam_page 列では、特定のパーティション内のヒープに割り当てた領域を管理する IMA ページ チェーンの最初の IAM ページを指しています。SQL Server 2005 では、ヒープ全体の移動には IMA ページを使用します。データ ページとその中にある行は特定の順序になっておらず、リンクもされていません。データ ページ間の論理接続は、IAM ページ内に記録されている情報だけです。

ms188270.note(ja-jp,SQL.90).gif重要 :
sys.system_internals_allocation_units システム ビューは内部だけで使用されていて、変更されることがあります。互換性は保証されません。

IAM をスキャンしてヒープのページを保持しているエクステントを見つけることによって、ヒープのテーブル スキャンまたはシリアル読み取りが行われます。IAM ではエクステントがデータ ファイルに入っている順序で表されています。したがって、シリアル ヒープ スキャンでは各ファイルが順に読み取られて進行します。スキャン シーケンスの設定に IAM ページを使用すると、ヒープの行が挿入順どおりに戻されるとは限らないことになります。

次の図に、IAM ページを使用して単一のパーティション分割されたヒープ内のデータ行が SQL Server データベース エンジン で取得されるしくみを示します。

単一パーティション ヒープによる IAM ページのデータ取得

参照

概念

クラスタ化インデックスの構造
非クラスタ化インデックスの構造
テーブルとインデックスの編成

ヘルプおよび情報

SQL Server 2005 の参考資料の入手