加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC DBREIND

发布时间:2020-12-12 13:37:44 所属栏目:MsSql教程 来源:网络整理
导读:对指定数据库中的表重新生成一个或多个索引。 重要提示 后续版本的 Microsoft SQL Server 将删除该功能。请不要在新的开发工作中使用该功能,并尽快修改当前还在使用该功能的应用程序。 请改用?ALTER INDEX。 ?Transact-SQL 语法约定 语法 DBCC DBREINDEX (

后续版本的 Microsoft SQL Server 将删除该功能。请不要在新的开发工作中使用该功能,并尽快修改当前还在使用该功能的应用程序。 请改用?ALTER INDEX。

?Transact-SQL 语法约定

语法
DBCC DBREINDEX 
( 
????table_name 
????[,index_name [,fillfactor ] ]
)
????[ WITH NO_INFOMSGS ] 
参数
table_name

包含要重新生成的指定索引的表的名称。表名称必须遵循有关标识符的规则。

index_name

要重新生成的索引名。索引名称必须符合标识符规则。如果指定了?index_name,则必须指定?table_name。如果未指定?index_name?或者该值为“ ”,则重新生成表的所有索引。

fillfactor

在创建或重新生成索引时,每个索引页上用于存储数据的空间百分比。创建索引后,fillfactor?将替换填充因子,从而成为该索引以及重新生成的任何其他非聚集索引(因为重新生成了聚集索引)的新默认值。当?fillfactor?为 0 时,DBCC DBREINDEX 将使用上次为索引指定的填充因子值。该值存储在sys.indexes?目录视图中。

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

WITH NO_INFOMSGS

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

注释

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:

  • 系统表

  • 空间索引

结果集
除非指定了 NO_INFOMSGS(必须指定表名),否则 DBCC DBREINDEX 将始终返回:

DBCC execution completed. If DBCC printed error messages,contact your system administrator.
权限
调用方必须拥有此表,或是?sysadmin?固定服务器角色、db_owner?固定数据库角色或?db_ddladmin?固定数据库角色的成员。

示例

A. 重新生成索引

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

Transact-SQL
USE AdventureWorks2008R2; 
GO
DBCC DBREINDEX ("HumanResources.Employee",PK_Employee_BusinessEntityID,80);
GO


B. 重新生成所有索引

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

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

重要提示 ALTER INDEX。

Transact-SQL 语法约定

语法
 
    
   
   
    
   
 
     table_name 
     
     
     

标识符的规则。

index_name

要重新生成的索引名。索引名称必须符合标识符规则。如果指定了?index_name,则必须指定?table_name。如果未指定?index_name?或者该值为“ ”,则重新生成表的所有索引。

fillfactor

在创建或重新生成索引时,每个索引页上用于存储数据的空间百分比。创建索引后,fillfactor?将替换填充因子,从而成为该索引以及重新生成的任何其他非聚集索引(因为重新生成了聚集索引)的新默认值。当?fillfactor?为 0 时,DBCC DBREINDEX 将使用上次为索引指定的填充因子值。该值存储在sys.indexes?目录视图中。

填充因子。

WITH NO_INFOMSGS

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

注释

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:

  • 系统表

  • 空间索引

结果集
除非指定了 NO_INFOMSGS(必须指定表名),否则 DBCC DBREINDEX 将始终返回:

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

示例

A. 重新生成索引

Employee_EmployeeID?聚集索引。

Transact-SQL
 B. 重新生成所有索引 
    
    

Employee?表重新生成所有索引。

                        

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!



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

重要提示
    推荐文章
      热点阅读