ヒープストレージは、これらのヒープ とは何の関係もありません。 。
ヒープとは、レコード自体が順序付けられていない(つまり、相互にリンクされていない)ことを意味します。
レコードを挿入すると、データベースが検出した空き領域にレコードが挿入されるだけです。
ヒープベースのテーブルの行を更新しても、他のレコードには影響しません(ただし、セカンダリインデックスには影響します)
HEAP
にセカンダリインデックスを作成する場合 テーブル、RID
(ストレージスペースへの一種の物理ポインタ)は行ポインタとして使用されます。
クラスター化されたインデックスは、レコードがB-Tree
の一部であることを意味します 。レコードを挿入すると、B-Tree
再リンクする必要があります。
クラスター化されたテーブルの行を更新すると、Bツリーが再リンクされます。 e。他のレコードの内部ポインタを更新します。
クラスター化テーブルにセカンダリインデックスを作成する場合、クラスター化インデックスキーの値が行ポインタとして使用されます。
これは、クラスター化されたインデックスが一意である必要があることを意味します。クラスター化インデックスが一意でない場合は、uniquifier
と呼ばれる特別な非表示列 一意の場合(およびサイズが大きい場合)を作成するインデックスキーに追加されます。
また、列にセカンダリインデックスを作成すると、値またはクラスター化インデックスのキーがセカンダリインデックスのキーの一部になることにも注意してください。
クラスター化されたテーブルにインデックスを作成することにより、実際には常に複合インデックスを取得します
CREATE UNIQUE CLUSTERED INDEX CX_mytable_1234 (col1, col2, col3, col4)
CREATE INDEX IX_mytable_5678 (col5, col6, col7, col8)
インデックスIX_mytable_5678
実際には、次の列のインデックスです:
col5
col6
col7
col8
col1
col2
col3
col4
これにはもう1つの副作用があります:
DESC
クラスター化テーブルの単一列インデックスの条件は、SQL Server
では意味があります
このインデックス:
CREATE INDEX IX_mytable ON mytable (col1)
次のようなクエリで使用できます:
SELECT TOP 100 *
FROM mytable
ORDER BY
col1, id
、これは:
CREATE INDEX IX_mytable ON mytable (col1 DESC)
次のようなクエリで使用できます:
SELECT TOP 100 *
FROM mytable
ORDER BY
col1, id DESC