sql serverでindexのREBUILDとREORGANIZE

6397 ワード

参考文献:
http://technet.microsoft.com/en-us/library/ms188388.aspx
本文
この文書では、alter indexを使用してrebuildインデックスとreorganizeインデックスを使用してフラグメントを消去する方法について説明します.rebuildはフラグメントを完全に消去できますが、reorganizeはできません.
Rebuild index
--1.      

select * into Employee from AdventureWorks2008R2.HumanResources.Employee;



--2.      :Employee    290            72 KB    56 KB    8 KB    8 KB

sp_spaceused Employee



--3.      

create clustered index IX_BusinessEntityID on Employee(BusinessEntityID);



--4.      :Employee    290            80 KB    56 KB    16 KB    8 KB

sp_spaceused Employee



--5.    ,  fragment,   fillfactor 60

ALTER INDEX ALL ON Employee

REBUILD WITH (FILLFACTOR = 60, SORT_IN_TEMPDB = ON,

              STATISTICS_NORECOMPUTE = ON);



--6.      :Employee    290            144 KB    88 KB    16 KB    40 KB

sp_spaceused Employee


結論
  • インデックスの作成後、indexは8から16に変わり、インデックスが物理ディスクを占有していることを示します.したがって、インデックスはphysical objectです.
  • インデックスを再構築しfillfactorを60に設定すると、充填因子が元の充填data pageを60%
  • しか装着していないため、data空間が大きくなることが分かった.
  • fillfactorは、既存のデータcreate indexおよびalter index rebuildにのみ使用できます.通常のinsert操作では無効です.
  • fillfactorの値は1-100で、msndでは0を取るのは100を取るのと同じだと言っていますが、実際のテストでは0を使ってエラーを報告していることがわかりました.

  • reorganize index
    ALTER INDEX ALL ON Employee
    
    REORGANIZE
    
    GO

    両者の区別
    Rebuilding an index drops and re-creates the index. This removes fragmentation, reclaims disk space by compacting the pages based on the specified or existing fill factor setting, and reorders the index rows in contiguous pages. When ALL is specified, all indexes on the table are dropped and rebuilt in a single transaction. 
    インデックスを再生成すると、インデックスが削除され、再作成されます.これにより、指定したパディング係数または既存のパディング係数に基づいて圧縮ページが設定され、フラグメントが削除され、ディスク領域が回収され、連続ページのインデックス行が並べ替えられます.ALLを指定すると、テーブル内のすべてのインデックスが削除され、単一のトランザクションで再生成されます.
    Reorganizing an index uses minimal system resources. It defragments the leaf level of clustered and nonclustered indexes on tables and views by physically reordering the leaf-level pages to match the logical, left to right, order of the leaf nodes. Reorganizing also compacts the index pages. Compaction is based on the existing fill factor value.
    インデックスの再編成最小限のシステムリソースを使用してインデックスを再編成します.リーフ・レベル・ページを物理的に並べ替えることで、リーフ・ノードの左から右への論理順序と一致させ、テーブルとビューの集計インデックスと非集計インデックスのリーフ・レベルをフラグメント化します.再編成すると、インデックス・ページも圧縮されます.圧縮は、既存の充填係数値に基づいています.
    Rebuilding an index can be executed online or offline. Reorganizing an index is always executed online. To achieve availability similar to the reorganize option, you should rebuild indexes online.
    rebulid indexはonlineでもofflineでも実行できますが、reorganize indexはonlineでのみ実行できます.
    Difference between rebuild index online and offline(PS:2012-9-11)
    rebuild indexはonlineモードでもofflineモードでもよい以上、両者にはどんな違いがあるのでしょうか.これはstackoverflowの上の文章を参考にすることができます:What is the difference between OFFLINE and ONLINE index rebuild in SQL Server?ここで私はやはり簡単にまとめます:
    オンラインモードで
    rebuild indexは、古いインデックスをコピーして新しいインデックスを作成します.古いインデックスは読み取りおよび変更できますが、古いインデックスの変更は新しいインデックスの下に同期して更新されます.間にはいくつかの衝突解決メカニズムがあり、具体的にはOnline Index OperationsのBuild Phaseという章を参照してください.その後、rebuildというプロセスが完全な場合、tableに一定時間ロックされ、この間に古いインデックスが新しいインデックスで置き換えられ、このプロセスが完了したらtable上のロックが解放されます.インデックス列にLOBオブジェクトが含まれている場合、SQL Server 2005/2008/R 2でrebuild index onlineは失敗します.sql server 2012では、インデックス列にLOBオブジェクトが含まれていても、Online Index Operations for indexes containing LOB columnsを参照することができる.
    offlineモードで
    rebuilde indexはtableにロックされ、このtableの読み書き操作はすべてブロックされます.この間、新しいインデックスは古いインデックスに基づいて作成されますが、実際にはコピーのプロセスですが、新しいインデックスには破片がなく、最後に新しいインデックスを使用して古いインデックスを置き換えます.rebuildのプロセス全体が完了すると、table上のロックが解放されます.