はじめに
SQL Serverでインデックスのメンテナンスを調べていると、「REORGANIZE」と「REBUILD」という2つの方法が出てきます。
どちらも断片化を解消するための処理ですが、「結局どっちを使えばいいのか?」と迷ったことはないでしょうか。
本記事では、インデックス再構成(REORGANIZE)と再構築(REBUILD)の違いと、実務での使い分けをわかりやすく整理します。
なお、SQL Serverのインデックス構造については、以下の記事で解説しています。
SQL Serverにテーブル再編成(REORG)がない理由|Db2・Oracleとの違いも解説
結論:軽いならREORGANIZE、重いならREBUILD
先に結論です。
・断片化が軽い → REORGANIZE
・断片化が大きい → REBUILD
一般的には以下が目安になります。
・5〜30% → REORGANIZE
・30%以上 → REBUILD
まずはこの基準を押さえておけばOKです。
断片化を確認する方法については、以下の記事で解説しています。
SQL Serverのインデックス断片化を確認する方法|DMVで簡単チェック
REORGANIZEとREBUILDの違い
ざっくり言うと、2つの違いは「どれくらい手を入れるか」です。
■ REORGANIZE(再構成)
・既存のインデックスを整理する
・断片化したページを並び替える
・オンラインで実行可能(影響が小さい)
■ REBUILD(再構築)
・インデックスを一度作り直す
・データを再配置して完全に整理する
・負荷が高い(時間もかかる)
イメージとしては、
REORGANIZE:軽い掃除
REBUILD:作り直し
と考えるとわかりやすいです。
実務で気になるポイントをもう少しだけ整理します。
■ 負荷
REORGANIZE:低い
REBUILD:高い
■ ロック
REORGANIZE:基本的に影響が小さい
REBUILD:状況によってはロックが強くなる
■ 効果
REORGANIZE:部分的な改善
REBUILD:完全に最適化される
このあたりを踏まえると、「気軽にできるのはREORGANIZE」「しっかり直すのがREBUILD」という位置づけになります。
| 再構成 (REORGANIZE) | 再構築 (REBUILD) | |
|---|---|---|
| 処理対象 | インデックスのリーフレベルのみ | インデックス全体 |
| 同時実行性 | 処理中も処理対象インデックスは使用可。 処理しているページに対して、そのページの処理中のみロックが保持される | 処理中は処理対象インデックスは使用不可。(ONLINE の場合は使用可) インデックス全体がロックされる |
| 処理を途中でキャンセルした場合 | キャンセルした時点までの処理は有効。(キャンセル時点で処理が完了した部分については断片化が解消した状態が維持される) | 処理はすべて無効。(元の状態に戻される) |
| 生成されるトランザクションログレコードの量 | 断片化の度合が大きいと多くなる | 断片化の度合にほとんど影響されない |
| 使用するデータファイル内の領域 | 再構築よりも少ない | 再構成よりも多い |
| 処理完了までに必要な時間 | 断片化の度合が大きいと長くなる | 断片化の度合にほとんど影響されない |
上記の表は、Microsoftの解説を参考に掲載しています。

実務での使い分け
実務では「どちらが優れているか」ではなく、「どの状況で使うか」が重要です。
基本は断片化の割合で判断します。
・断片化が軽い → REORGANIZE
・断片化が大きい → REBUILD
ただし、本番環境では負荷や影響も考慮する必要があります。
例えば、
・日次はREORGANIZEのみ実施
・月次バッチでREBUILD
といった運用にしているケースも多いです。
無理にREBUILDを実行すると性能影響が出ることもあるため、「いつ実行するか」も重要なポイントです。
まとめ
インデックス再構成と再構築の違いはシンプルです。
・REORGANIZE:軽い整理
・REBUILD:作り直し
そして重要なのは使い分けです。
・軽い断片化 → REORGANIZE
・大きな断片化 → REBUILD
SQL Serverではインデックス管理がそのままパフォーマンスに影響するため、定期的なメンテナンスを意識することが重要です。
インデックスが効かない原因については、以下の記事で整理しています。


コメント