SQL Server

SQL SQLServer

SQL Serverのインデックス断片化を改善!再構築と再構成の使い分け完全ガイド

2025年9月24日

薄暗いサーバールームの片隅で、光るモニターの数字が静かに瞬いています。

目には見えない小さな乱れが、データベースの中で静かに進行しています。断片化――それは、整然と並ぶはずのデータが、知らぬ間にばらばらになってしまう現象です。

SQL Serverでは、テーブルのインデックスが断片化すると検索や更新のパフォーマンスに影響します。

まるで、長い年月を経てページが崩れた古書のように、読みたい情報にたどり着くための道を遠回りさせます。

断片化は修復可能で、正しい手順を踏めばデータベースは再び軽やかに息を吹き返します。

断片化率に応じてインデックスを再構築(REBUILD)または再構成(REORGANIZE)することが推奨されます。

断片化率が1%〜30%未満の場合

インデックスを「再構成(REORGANIZE)」します。

これはインデックスのページを整理する軽量な操作で、システムの稼働をほとんど止めずに実行可能です。

## 断片化率が1%〜30%未満の場合
ALTER INDEX [インデックス名] ON [テーブル名] REORGANIZE;

 

断片化率が30%以上の場合

インデックスを「再構築(REBUILD)」します。

これはインデックスを一度削除して作り直す操作で、完全に順序を整え直すため、断片化が深い場合に有効です。

## 断片化率が30%以上の場合
ALTER INDEX [インデックス名] ON [テーブル名] REBUILD;

 

オンラインで再構築したい場合

システムを停止させずにインデックスを再構築したい場合は、WITH (ONLINE = ON)オプションを付けます。

## オンラインで再構築したい場合
ALTER INDEX [インデックス名] ON [テーブル名] REBUILD WITH (ONLINE = ON);

エディションによる制限

ただし、このオンライン再構築はSQL Serverのエディションによって利用可否が異なります。

特にStandard Editionではオンラインで利用できないので、実質的な実行タイミングはメンテ時などに限られます。

  1. Enterprise Edition / Developer Edition / Business Critical Edition(Azure SQL含む)
    → ONLINE = ON が利用可能です。システム稼働中にインデックスを再構築できるため、ユーザーへの影響を最小限に抑えながら作業が行えます。
  2. Standard Edition / Web Edition / Express Edition
    → ONLINE = ON はサポートされていません。この場合、再構築中はテーブルにロックがかかり、アクセスがブロックされます。ユーザーからの問い合わせやトランザクションは待機状態になるため、運用上の影響に注意が必要です。

注意点

  1. オンライン再構築を使用しても完全に無停止ではありません。内部的に短時間のスキーマ修正ロック(Sch-Mロック)が発生する場合があります。
  2. 大きなテーブルや大量のインデックスでは、オンライン再構築でもCPUやI/O負荷が増大することがあります。リソースが逼迫している環境では、他の処理への影響も考慮する必要があります。
  3. 運用中のテーブルでオンライン再構築を行う場合は、可能であれば業務の負荷が低い時間帯にスケジュールすることが推奨されます。

断片化率に応じて適切にインデックスを整理することで、SQL Serverのパフォーマンスを維持することができます。

  • この記事を書いた人

朝倉卍丸

シングルモルトスコッチなどのお土産を持ってきた人を助けるのが好きです。サービスの分割が重要ですが、昔ながらの方法でやりたいこともありますよね。

よく読まれている記事

条件の0=0は全てが正であるを意味するSQL 1

SQLの条件に0=0のような記述を見かけます。 変わった書き方の条件ですが、これは「全てが正である」事を意味しており、結合条件の場合はCROSS JOINと同じです。 下記の例で言えば、結合するsub ...

DISTINCTを使わないで重複排除を考えるSQL 2

SQLのDISTINCTはEXISTSとかGROUP BYでなんとかする事もできます。 DISTINCTは暗黙的なソートがされますが、何のDBを使うにせよ過去のバージョンならともかく、最近のバージョン ...

RFC 5322に準拠させた正規表現言語別 3

RFC5322で定義されている正規表現を、各言語の正規表現に変化させた形になります。 完全な電子メール正規表現は存在しないので、結局のところ何かの公式基準に従っていたとしても、自分が携わるサービスのル ...

-SQL, SQLServer