この投稿に触発された:https : //twitter.com/#! / SQLChicken / status / 102930436795285505
ヒープ:インデックス構造と見なされますか、それとも厳密にインデックスのないテーブル構造ですか?
この投稿に触発された:https : //twitter.com/#! / SQLChicken / status / 102930436795285505
ヒープ:インデックス構造と見なされますか、それとも厳密にインデックスのないテーブル構造ですか?
回答:
MSDNから- テーブルとインデックスの構成:
「SQL Serverテーブルは、2つの方法のいずれかを使用して、パーティション内のデータページを整理します。
データ行は、クラスター化インデックスキーに基づいた順序で格納されます。クラスター化インデックスは、クラスター化インデックスキー値に基づいて行の高速検索をサポートするBツリーインデックス構造として実装されます。リーフレベルのデータページを含む、インデックスの各レベルのページは、二重リンクリストにリンクされています。ただし、あるレベルから別のレベルへのナビゲーションは、キー値を使用して実行されます。
データ行は特定の順序で格納されることはなく、データページのシーケンスに特定の順序はありません。データページはリンクリストにリンクされていません。」
ヒープ-SQL Serverの最適化:
「定義上、ヒープテーブルはクラスター化インデックスを持たないテーブルです。ヒープベースのテーブルの異なるページはディスク上の異なる非連続領域を占有し、どのようにもリンクされません。」
クラスター化インデックス構造とは対照的に、「SQL Serverでは、インデックスはBツリーとして編成されます。インデックスBツリーの各ページはインデックスノードと呼ばれます。Bツリーの最上位ノードはルートノードと呼ばれます。インデックス内のノードの最下位レベルはリーフノードと呼ばれ、ルートとリーフノード間のインデックスレベルは集合的に中間レベルと呼ばれます。クラスター化インデックスでは、リーフノードには基になるテーブルのデータページが含まれます。中間レベルノードには、インデックス行を保持するインデックスページが含まれ、各インデックス行には、キー値と、Bツリーの中間レベルページまたはインデックスのリーフレベルのデータ行へのポインタが含まれます。インデックスは二重リンクリストにリンクされています。」
その他の参照:
インデックスは、行にデータの順序があることを意味します。ヒープはそのような順序では作成されず、順序も維持されないため、テーブルデータを格納する方法にすぎません。
ヒープを指定するには、いくつかの例(dm_db_index_physical_statsなど)があります。0のインデックスIDを入力する必要があります。これは先ほど述べたことと矛盾しているように見えますが、使用法; これ以上何もない。