0

前提 : クラスタ化インデックスの場合、ディスク上のレコードの順序はクラスタ化インデックスの順序と同じです。

問題 : 新しいレコードが挿入されるたびに、ディスク上でデータが再配置されますか? ディスク上でデータの移動を実行する際のパフォーマンスに大きな影響を与えませんか。

MySQL による即興 : 各インデックス ページには、将来の更新用に予約されたインデックス ページ内のスペースの 1/16 という予約済みスペースがあります。

私の質問: このスペース (予約済みスペース) が使い果たされ、新しいレコードが書き込まれるのを待っているとどうなりますか? これにより、そのインデックス ページ以降のすべてのデータが、この新しいレコードに収まるように再配置されますか? それはパフォーマンスに大打撃ではないですか?はいの場合、考えられる回避策は何ですか?

追加の参照: これは、オペレーティング システムが内部フラグメンテーションを処理する方法に直接対応し、ファイル システムは、ディスクのシーク時間を節約するために、同じファイルに対応するすべてのブロックをディスク上で可能な限り近くに格納しようとしますか? 可能であれば、2 つがどのように関連しているかについての説明はありますか?

同じことに関して、 Gary Mcgillによる投稿 (クラスター化されたインデックスのために SQL クエリが遅い) の回答が非常に役立ちます。

4

1 に答える 1

1

はい、クラスター化されたインデックスを使用し、その間に何かを挿入すると、大きな問題が発生します。そのため、直線的に挿入する場合にのみクラスター化インデックスを使用するように注意する必要があります。したがって、AUTO_INCREMENT ID やその他の列では、行が最後の行の「前」に挿入されることは一般的ではありません...

私がこれで持っていた興味深いケースは、ID フィールドが 2 文字のプレフィックスと連番で構築された場合です...数字部分自体はこれの良い候補でしたが、2 文字のプレフィックスが挿入さZZ1234れ、AA1235問題。

考えられる回避策: 状況が適切でない場合は、クラスタ化を使用しないようにインデックスを再構築します。

これは、オペレーティング システムが内部フラグメンテーションを処理し、ファイル システムが同じファイルに対応するすべてのブロックをディスク上のできるだけ近くに格納して、ディスクのシーク時間を節約しようとする方法に直接対応していますか?

これらが直結しているとは思えません。一部の DBMS では、DBMS にブロック デバイスを完全に制御させることができ、ディスク/SSD などのデータのレイアウトに影響を与える OS レイヤーはありません。

于 2012-10-31T11:16:35.997 に答える