ヒープ構造
ヒープとはクラスタ化インデックスを使用しないテーブルのことです。ヒープは、そのヒープが使用するパーティションにつき 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 ページ内に記録されている情報だけです。
重要 : |
---|
sys.system_internals_allocation_units システム ビューは内部だけで使用されていて、変更されることがあります。互換性は保証されません。 |
IAM をスキャンしてヒープのページを保持しているエクステントを見つけることによって、ヒープのテーブル スキャンまたはシリアル読み取りが行われます。IAM ではエクステントがデータ ファイルに入っている順序で表されています。したがって、シリアル ヒープ スキャンでは各ファイルが順に読み取られて進行します。スキャン シーケンスの設定に IAM ページを使用すると、ヒープの行が挿入順どおりに戻されるとは限らないことになります。
次の図に、IAM ページを使用して単一のパーティション分割されたヒープ内のデータ行が SQL Server データベース エンジン で取得されるしくみを示します。
参照
概念
クラスタ化インデックスの構造
非クラスタ化インデックスの構造
テーブルとインデックスの編成