(SQL Server に基づく回答 - 質問は 100% 指定されていません)
クラスター化されたインデックスでは、リーフ レベルのノード自体がデータを並べ替えられた順序で保持しますよね?
これは正確ではありません。データはリーフ上に任意の順序で格納できますが、ページ上のスロット配列は実際には、データがページから読み取られる順序であり、データの物理的な順序ではありません。
つまり、挿入/更新/削除のたびに、ソートされた順序を維持するためにノードが再シャッフルされます。
ノード (たとえば、ページが分割され、二重リンク リストの前方/後方ポインターが変更されます)。ただし、ページ内では、スロット配列は依然として順序を保持するエンティティであり、行自体はスロット配列の順序に一致するようにシャッフルされません。
では、挿入された順序でデータを取得するにはどうすればよいでしょうか。
通常、正確な順序になることは保証されていません。これは、スロット配列が順序をより代表するヒープページでより多く発生する傾向がありますが、保証されていません。
1、7、4、5、2 という順序でデータが挿入され、このフィールドにクラスター化インデックスが作成されるとします。つまり、データは 1、2、4、5、7 の順序で内部に保存されますよね?
いいえ、ページに 1,7,4,5,2 として格納されますが、スロット配列はページ上のアドレスを 7,5,4,2,1 として読み取ります (ページの終わりから逆方向に構築されます)。ですから、逆に読んでください。)
これにより、特定の値のルックアップが高速化される可能性がありますが、ユーザーが挿入した順序で最初の 3 つの値が必要な場合はどうなるでしょうか?
この場合は重要ではありません - 順序付けに関するそのような保証がないことを除けば、SQL はページ全体をメモリに読み込みます。この種のレベルの SQL Internals について詳しく知りたい場合は、最良の情報源の 1 つとして Kalen Delaney の SQL Internals book をお勧めします。
挿入順序に関する情報が必要な場合は、ある種の insert_timestamp をお勧めします