挿入の更新と削除を実行すると、インデックスは内部と外部の両方で断片化されます。
内部フラグメンテーションは、インデックスページの空き領域の割合が高いことを意味します。つまり、SQL Serverは、インデックスのスキャン時にさらに多くのページを読み取る必要があります。
外部のフラグメンテーションは、インデックスのページが整然としていない場合であるため、SQL Serverは、特にIOの観点から、インデックスを読み取るためにより多くの作業を行う必要があります。
インデックスが断片化しすぎると、せいぜいクエリの効率が低下しますが、最悪の場合、SQL Serverはインデックスの使用をすべて停止します。つまり、実質的にすべてのクエリはテーブルスキャンまたはクラスター化インデックススキャンを実行する必要があります。これはパフォーマンスを大きく損ないます!
インデックスを再編成すると、SQL Serverは既存のインデックスページを使用し、それらの年齢のデータをシャッフルします。これにより、内部の断片化が緩和され、少量の外部の断片化も除去できます。再構築よりも軽量な操作であり、常にオンラインです。
インデックスを再構築すると、SQL Serverは実際にインデックスのデータを再利用し、インデックスページの新しいセットを使用します。これにより、内部および外部の断片化が明らかに軽減されますが、より重い操作であり、デフォルトではインデックスがオフラインになりますが、SQL Serverのバージョンと設定に応じてオンライン操作として実行できます。
ただし、再構築後に断片化が0になるとは思わないでください。MAXDOPクエリヒントを使用しない限り、SQL Serverは再構築操作と関連するプロセッサを並列化します。各プロセッサまたはコアは、インデックスのセクションまたはフラグメントを個別に再構築するため、断片化が増加する可能性があります。お互い。これは、最適なフラグメンテーションレベルとインデックスの再構築にかかる時間とのトレードオフです。フラグメンテーションがほぼ0の場合、MAXDOP 1を使用して、TempDBで結果をソートします。