索引在數據庫相關工作者的日常工作中占據了很重要的位置,索引需要牽涉到索引創建、優化和維護多方面的工作,本文以實例結合相關原理來介紹索引維護相關的知識。文中的相關代碼,也可以滿足多數情況下索引的維護需求。
實現步驟
1. 以什麼標准判斷索引是否需要維護?
2. 索引維護的方法有哪些?
3. 能否方便地整理出比較通用的維護過程,實現自動化維護?
一、 以什麼標准判斷索引是否需要維護?
由於本文集中討論索引維護相關,所以我們暫且拋開創建的不合理的那些索引,僅從維護的角度來討論。從索引維護的角度來講,最主要的參考標准就是索引碎片的大小。通常情況下,索引碎片在10%以內,是可以接受的。下面介紹獲取索引碎片的方法:
SQL Server 2000: DBCC SHOWCONTIG
SQL Server 2005: sys.dm_db_index_physical_stats
實例(取db_test數據庫所有索引碎片相關信息):
SQL Server 2000:
USE [db_test];
GO
DBCC SHOWCONTIG WITH TABLERESULTS, ALL_INDEXES
GO
SQL Server 2005:
DECLARE @db_name VARCHAR(256)
SET @db_name='db_test'
SELECT
db_name(a.database_id) [db_name],
c.name [table_name],
b.name [index_name],
a.avg_fragmentation_in_percent
FROM
sys.dm_db_index_physical_stats (DB_ID(@db_name), NULL,NULL, NULL, 'Limited') AS a
JOIN
sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id
JOIN
sys.tables AS c ON a.object_id = c.object_id
WHERE
a.index_id>0
AND a.avg_fragmentation_in_percent>5 -–碎片程度大於5