SQL Serverデータベースに、主キーにクラスター化インデックスを持つテーブルがあります。テーブルには100万行あります。テーブルから10K行を削除した場合、削除操作の実行中にインデックスが再構築されますか?
削除操作はストアドプロシージャの一部です。一度に複数のクライアントがストアドプロシージャを実行できますが、個々の実行ごとに独自の行のセット(主キーによって一意に識別される)が削除されます。複数のクライアントがプロシージャを実行すると、キーロック(タイプU)がブロックされます。ブロッカーロックは同じテーブルの行に属しており、同時に実行されているトランザクションの一部ではありません。各実行はそれ自体の行のセットを削除しようとしているため、ブロックはありません。ロックのエスカレーションはオフになっているため、発生していません。
削除操作によってインデックスが再調整されるため、再構築プロセス中にテーブルの任意の行でキーロックが発生する可能性があると思います。
これについてのご意見をいただければ幸いです。
いい質問だと思います。はい、レコードを削除すると、インデックスが再構築されます。再構築中、テーブルはロックされ、他のユーザーはそのテーブルにアクセスできなくなります。stackoverflow.com/questions/6309614/...
—
KumarHarsh
いいえ、クラスター化インデックスの行を削除しても、インデックスは再構築されません。データの削除に使用したクエリも投稿できますか。Uロックは、クエリが削除されるデータを見つけようとするときに発生し、最後に行を排他的にロックして削除します。
—
シャンキー
削除が発生すると、「ホール」が作成されます。または、クラスター化インデックスからデータが削除されたときにスペースと言うことができます。これはページ密度を低くする可能性があり、断片化と見なすことができます。CIで挿入が発生すると、右側のレコードがいっぱいになるため、スペースがいっぱいになることはありません。ただし、SQL Serverがこのスペースを自動的に削除するわけではありません。このスペースを満たすには、インデックスを再構築するか、再編成する必要があります。そのようなリバランスはあり
—
ません
@jayesh私は、ツリー内のノードの順序がリバランスとどのように関係しているのかわかりません。Bツリーは(挿入または削除のため)不均衡になる可能性があります。これらの場合、ノードの順序は変わりません。それは単に不均衡な木です。
—
ypercubeᵀᴹ
@jayeshあなたが使用している用語があなたと私たちの両方を混乱させていると思うので、MSSQLドキュメントのいくつかを読むことはあなたに利益をもたらすと思います。
—
LowlyDBA 2018