SQLServer2005のクラスター化インデックスとは何かを理解するのに苦労しています。私はMSDNの記事ClusteredIndexStructures(とりわけ)を読みましたが、それを正しく理解しているかどうかはまだわかりません。
(主な)質問は次のとおりです。クラスター化インデックスのあるテーブルに(「low」キーを使用して)行を挿入するとどうなりますか?
上記のMSDNの記事には次のように記載されています。
データチェーン内のページとその中の行は、クラスター化インデックスキーの値に基づいて並べ替えられます。
たとえば、クラスター化インデックスを使用すると、次のようになります。
たとえば、順番に並べられたリストの先頭に近いテーブルにレコードが追加された場合、そのレコードの後のテーブル内のレコードは、レコードを挿入できるようにシフトする必要があります。
これは、非常に「低い」キーの行を、すでに数十億行が含まれているテーブルに挿入すると、文字通りすべての行がディスク上で物理的にシフトされることを意味しますか?信じられない。これには何年もかかりますね
それとも(私が思うに)最初のデータページがどれだけ「いっぱい」であるかに応じて2つのシナリオがあるのではないでしょうか。
- A)ページにレコードを収容するのに十分な空き領域がある場合、そのページは既存のデータページに配置され、データはそのページ内で(物理的に)並べ替えられる可能性があります。
- B)ページにレコード用の十分な空き領域がない場合、新しいデータページが作成され(ディスク上のどこかに!)、Bツリーのリーフレベルの前面に「リンク」されますか?
これは、データの「物理的な順序」が「ページレベル」(つまり、データページ内)に制限されるが、物理ハードドライブ上の連続するブロックにあるページには制限されないことを意味します。次に、データページが正しい順序でリンクされます。
または、別の方法で定式化されます。SQLServerがクラスター化インデックスを持つテーブルの最初のN行を読み取る必要がある場合、データページを順番に(リンクをたどって)読み取ることができますが、これらのページは(必然的に)ディスク上で順番にブロックされません。(したがって、ディスクヘッドは「ランダムに」移動する必要があります)。
私はどれくらい近いですか?:)