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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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

(完)