当SQLServer的数据积累到一定的数量,查询效率往往急剧下降,常常让人无法忍受,这时我们会想到各种方法对系统进行优化。DBCC是一组功能强大的控制台命令,其中DBCC DBREINDEX经常用到,它可以帮助我们重建指定表的索引,以提高查询的速度。

该命令的用法比较简单,比如:

dbcc dbreindex ([customer],'',90)

第一个参数是要重建索引的表名,第二个参数指定索引名称,空着就表示所有,第三个参数叫填充因子,是指索引页的数据填充程度,0表示使用先前的值,100表示每个索引页都填满,这时查询效率最高,但插入索引时会移动其它索引,可根据实际情况来设置。

这个命令只能操作单个表,如果想对某数据库中的所有表都重建索引,则需要写个程序:

DECLARE @table_name VARCHAR(200)
 
--查询数据库里的所有表名
DECLARE cursor_reindex CURSOR FAST_FORWARD READ_ONLY FOR SELECT name FROM sys.tables
 
--使用游标遍历表列表
OPEN cursor_reindex
 
FETCH NEXT FROM cursor_reindex INTO @table_name
 
WHILE @@FETCH_STATUS = 0
BEGIN
    --开始重建表索引
    DBCC DBREINDEX(@table_name)
    --DBCC DBREINDEX(@table_name, '', 90)
 
    FETCH NEXT FROM cursor_reindex INTO @table_name
END
 
CLOSE cursor_reindex
DEALLOCATE cursor_reindex

(完)