DBCC DBREINDEX (Transact-SQL)

对指定数据库中的表重新生成一个或多个索引。

ms181671.note(zh-cn,SQL.90).gif重要提示:
后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 改用 ALTER INDEX

主题链接图标Transact-SQL 语法约定

语法

DBCC DBREINDEX 
( 
        table_name 
    [ , index_name [ , fillfactor ] ]
)
    [ WITH NO_INFOMSGS ] 

参数

  • table_name
    要为其重新生成指定索引的表名。表名称必须遵循有关标识符的规则。database.
  • index_name
    要重新生成的索引名。索引名称必须符合标识符规则。如果指定了 index_name,则必须指定 table_name。如果未指定 index_name 或将其指定为 '',则重新生成表的所有索引。
  • fillfactor
    在创建或重新生成索引时,每个索引页上用于存储数据的空间百分比。在创建索引时,fillfactor 将替换填充因子,从而成为该索引以及重新生成的任何其他非聚集索引(因为已经重新生成了聚集索引)的新默认值。当 fillfactor 为 0 时,DBCC DBREINDEX 将使用上次为索引指定的填充因子值。该值存储在 sys.indexes 目录视图中。

    如果指定了 fillfactor,则必须指定 table_nameindex_name。如果未指定 fillfactor,则使用默认填充因子 100。有关详细信息,请参阅填充因子

  • WITH NO_INFOMSGS
    取消严重级别从 0 到 10 的所有信息性消息。

结果集

无论是否指定了任何选项(NO_INFOMSGS 除外,但必须指定表名),DBCC DBREINDEX 均返回:

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

备注

DBCC DBREINDEX 重新生成表的一个索引或为表定义的所有索引。通过允许动态重新生成索引,可以重新生成强制 PRIMARY KEY 或 UNIQUE 约束的索引,而不必删除并重新创建这些约束。这意味着无需了解表或其约束的结构,便可重新生成索引。这可能在将数据大容量复制到表中以后发生。

DBCC DBREINDEX 可以在一条语句中重新生成表的所有索引。这要比对多条 DROP INDEX 和 CREATE INDEX 语句进行编码更容易。由于该工作是通过一条语句执行的,因此 DBCC DBREINDEX 自动为原子性,而单个 DROP INDEX 和 CREATE INDEX 语句必须包含在事务中才能成为原子性。此外,DBCC DBREINDEX 提供了比单个 DROP INDEX 和 CREATE INDEX 语句具有更多优化性能的优点。

与 DBCC INDEXDEFRAG 或具有 REORGANIZE 选项的 ALTER INDEX 不同,DBCC DBREINDEX 是一个脱机操作。如果重新生成了非聚集索引,则在该操作的持续时间内,相关表持有共享锁。这可以禁止对表进行修改。如果重新生成了聚集索引,则持有排他表锁。这可以禁止任何表访问,因此可以有效地使表脱机。使用具有 ONLINE 选项的 ALTER INDEX REBUILD 语句执行联机索引重新生成,或控制索引重新生成操作期间的并行度。

有关选择方法来重新生成或重新组织索引的详细信息,请参阅重新组织和重新生成索引

不支持在系统表中使用 DBCC DBREINDEX。

权限

调用方必须拥有此表,或是 sysadmin 固定服务器角色、db_owner 固定数据库角色或 db_ddladmin 固定数据库角色的成员。

示例

A. 重新生成索引

以下示例使用填充因子 80AdventureWorks 数据库中的 Employee 表重新生成 Employee_EmployeeID 聚集索引。

USE AdventureWorks; 
GO
DBCC DBREINDEX ("HumanResources.Employee", PK_Employee_EmployeeID,80);
GO

B. 重新生成所有索引

以下示例使用填充因子值 70AdventureWorks 中的 Employee 表重新生成所有索引。

USE AdventureWorks; 
GO
DBCC DBREINDEX ("HumanResources.Employee", " ", 70);
GO

请参阅

参考

ALTER TABLE (Transact-SQL)
CREATE TABLE (Transact-SQL)
DBCC (Transact-SQL)
sys.indexes (Transact-SQL)
sys.dm_db_index_physical_stats
ALTER INDEX (Transact-SQL)

其他资源

表和索引体系结构

帮助和信息

获取 SQL Server 2005 帮助