断片化解消

解消法としては、クラスタインデックスを再作成するらしい。

create unique clustered 
index [PK_OrderTBL] on [dbo].[OrderTBL] 
([OrderKey])
with drop_existing

こいつを実行した後、再度DBCC SHOWCONTIGでチェックすると

スキャン密度 [最善 :実際].......: 99.67% [601:603]
論理スキャン フラグメンテーション ..................: 0.02%
エクステント スキャン フラグメンテーション ...................: 26.20%

スキャン密度は、17.06% -> 99.67%
論理スキャン断片化で、 39.56% -> 0.02%
エクステント スキャン断片化は 80.20% -> 26.20%

それぞれ改善された。

さらに、DBCC DBREINDEX を実行してみた

DBCC DBREINDEX ('OrderTBL' , '', 70)
スキャン密度 [最善 :実際].......: 99.64% [828:831]
論理スキャン フラグメンテーション ..................: 6.26%
エクステント スキャン フラグメンテーション ...................: 14.08%

スキャン密度は、17.06% -> 99.67% -> 99.64%
論理スキャン断片化で、 39.56% -> 0.02% -> 6.26%
エクステント スキャン断片化は 80.20% -> 26.20% -> 14.08%

かえって悪化しました(笑
これは、どちらか一方を実施すれば良い処理だったんだろうか。

別のテーブルで、今度はDBCC DBREINDEX を先に実施してみた。

スキャン密度は、16.45% -> 99.60% -> 99.63%
論理スキャン断片化で、 41.04% -> 0.02% -> 11.01%
エクステント スキャン断片化は 80.14% -> 26.00% -> 47.23%

どうやら、DBCC DBREINDEX で十分というものらしい。
その代わり

 「DBREINDEX」は強力で、エクステントを含めて連続した領域に再構築できますが、シングルユーザーでしか使えません。オフタイムに使うコマンドです。一方「INDEXDEFRAG」はオンラインでユーザー接続中でも実行可能ですが、エクステントの断片化は解消できません。(排他制御の落とし穴を避けるインデックス設計より)

という話しなので、システム使用中に実施することはできない。