以下的文章主要介绍的是DBCC DBREINDEX重建索引对SQL Server性能进行提高的实际操作步骤,大多数SQL Server数据库表需要索引来对数据的实际访问速度进行提高,如果没有索引,SQL Server要进行表格扫描读取表中的每一个记录才能找到索要的数据。

索引可以分为簇索引和非簇索

引,簇索引通过重排表中的数据来提高数据的访问速度,而非簇索引提高SQL Server性能则通过维护表中的数据

指针来提高数据的索引。

1. 索引的体系结构

为什么要不断的维护表的索引?首先,简单介绍一下索引的体系结构。SQL

Server在硬盘中用8KB页面在数据库文件内存放数据。缺省情况下这些页面及其包含的数据

是无组织的。为了使混乱变为有序,就要生成索引。生成索引后,就有了索引页和数据页,

数据页保存用户写入的数据信息。索引页存放用于检索列的数据值清单(关键字)和索引表

中该值所在纪录的地址指针。索引分为簇索引和非簇索引,簇索引实质上是将表中的数据排

序,就好像是字典的索引目录。非簇索引不对数据排序,它只保存了数据的指针地址。向一

个带簇索引提高SQL Server性能的表中插入数据,当数据页达到100%时,由于页面没有空间插入新的的纪录,这

时就会发生分页,SQL Server

将大约一半的数据从满页中移到空页中,从而生成两个半的满页。这样就有大量的数据空间

。簇索引是双向链表,在每一页的头部保存了前一页、后一页地址以及分页后数据移动的地

址,由于新页可能在数据库文件中的任何地方,因此页面的链接不一定指向磁盘的下一个物

理页,链接可能指向了另一个区域,这就形成了分块,从而减慢了系统的速度。对于带簇索

引和非簇索引的表来说,非簇索引的关键字是指向簇索引的,而不是指向数据页的本身。

为了克服数据分块带来的负面影响,需要重构表的索引,这是非常费时的,因此只能在需要

时进行。可以通过DBCC SHOWCONTIG来确定是否需要重构表的索引提高SQL Server性能。

2. DBCC SHOWCONTIG用法 下面举例来说明DBCC SHOWCONTIG和DBCC

REDBINDEX的使用方法。以应用程序中的Employee数据表作为例子,在 SQL Server的Query

analyzer输入命令:

use database_name declare @table_id int set @table_id=object_id(’Employee’) dbcc showcontig(@table_id)

输出结果:

DBCC SHOWCONTIG scanning ’Employee’ table... Table: ’Employee’

(1195151303); index ID: 1, database ID: 53 TABLE level scan performed. - Pages

Scanned................................: 179 - Extents

Scanned..............................: 24 - Extent

Switches..............................: 24 - Avg. Pages per

Extent........................: 7.5 - Scan Density [Best Count:Actual

Count].......: 92.00% [23:25] - Logical Scan Fragmentation ..................:

0.56% - Extent Scan Fragmentation ...................: 12.50% - Avg. Bytes Free

per Page.....................: 552.3 - Avg. Page Density

(full).....................: 93.18% DBCC execution completed. If DBCC printed

error messages, contact your system administrator.

通过分析这些结果可以知道该表的索引是否需要重构。如下描述了每一行的意义: 信息

描述 Pages Scanned 表或索引中的长页数 Extents Scanned

表或索引中的长区页数 Extent Switches

DBCC遍历页时从一个区域到另一个区域的次数 Avg. Pages per Extent

相关区域中的页数 Scan Density[Best Count:Actual Count] Best

Count是连续链接时的理想区域改变数,Actual Count是实际区域改变数,Scan

Density为100%表示没有分块。 Logical Scan Fragmentation

扫描索引页中失序页的百分比 Extent Scan Fragmentation

不实际相邻和包含链路中所有链接页的区域数 Avg. Bytes Free per Page

扫描页面中平均自由字节数 Avg. Page Density (full)

平均页密度,表示页有多满

从上面命令的执行结果可以看的出来,Best count为23 而Actual

Count为25这表明orders表有分块需要重构表索引。下面通过DBCC

DBREINDEX来重构表的簇索引。

3. DBCC DBREINDEX 用法 重建指定数据库中表的一个或多个索引。

语法 DBCC DBREINDEX ( [ ’database.owner.table_name’ [ , index_name [ ,

fillfactor ] ] ] )

参数 ’database.owner.table_name’

是要重建其指定的索引的表名。数据库、所有者和表名必须符合标识符的规则。有关更多信

息,请参见使用标识符。如果提供 database 或 owner 部分,则必须使用单引号 (’)

将整个 database.owner.table_name 括起来。如果只指定 table_name,则不需要单引号。

index_name 是要重建的索引名。索引名必须符合标识符的规则。如果未指定 index_name

或指定为 ’ ’,就要对表的所有索引进行重建。

fillfactor 是创建索引时每个索引页上要用于存储数据的空间百分比。fillfactor

替换起始填充因子以作为索引或任何其它重建的非聚集索引(因为已重建聚集索引)的新默

认值。如果 fillfactor 为 0,DBCC DBREINDEX 在创建索引提高SQL Server性能时将使用指定的起始

fillfactor。

同样在Query Analyzer中输入命令:

dbcc dbreindex(’database_name.dbo.Employee’,’’,90)

然后再用DBCC SHOWCONTIG查看重构索引提高SQL Server性能后的结果:

DBCC SHOWCONTIG scanning

’Employee’ table... Table: ’Employee’ (1195151303); index ID: 1, database ID: 53

TABLE level scan performed. - Pages Scanned................................: 178

- Extents Scanned..............................: 23 - Extent

Switches..............................: 22 - Avg. Pages per

Extent........................: 7.7 - Scan Density [Best Count:Actual

Count].......: 100.00% [23:23] - Logical Scan Fragmentation ..................:

0.00% - Extent Scan Fragmentation ...................: 0.00% - Avg. Bytes Free

per Page.....................: 509.5 - Avg. Page Density

(full).....................: 93.70% DBCC execution completed. If DBCC printed

error messages, contact your system administrator.

通过结果我们可以看到Scan Denity为100%。

【编辑推荐】

【责任编辑:孙巧华 TEL:(010)68476606】

点赞 0

dbcc dbreindex server sql_SQL Server性能的提高,可通过DBCC DBREINDEX重建索引相关推荐

  1. dbcc dbreindex server sql_SQL Server数据库碎片整理

    碎片产生 在SQL Server中,存储数据的最小单位是页,每一页所能容纳的数据为8060字节.而页的组织方式是通过B树结构 SQL Server向每个页内存储数据的最小单位是表的行(Row) 当叶子 ...

  2. as cast float server sql_Sql Server中Float格式转换字符串varchar方法

    SELECT CONVERT(varchar(100), CAST(@testFloat AS decimal(38,2))) SELECT STR(@testFloat, 38, 2) 从Excel ...

  3. as cast float server sql_Sql Server中Float格式转换字符串varchar方法(转)

    SELECT CONVERT(varchar(100), CAST(@testFloat AS decimal(38,2))) SELECT STR(@testFloat, 38, 2) 从Excel ...

  4. 2008日志清理 server sql_SQL Server 2008 收缩日志 清空删除大日志文件

    由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消: (SQL2005) BackupLog DNName with no_log go ...

  5. dbcc dbreindex server sql_DBCC DBREINDEX重建索引提高SQL Server性能

    DBCC DBREINDEX重建索引提高SQL Server性能 [转载]大多数SQL Server表需要索引来提高数据的访问速度,如果没有索引,SQL Server 要进行表格扫描读取表中的每一个记 ...

  6. DBCC DBREINDEX重建索引提高SQL Server性能

    大多数SQL Server表需要索引来提高数据的访问速度,如果没有索引,SQL Server 要进行表格扫描读取表中的每一个记录才能找到索要的数据.索引可以分为簇索引和非簇索引,簇索引通过重排表中的数 ...

  7. dbcc dbreindex server sql_SQL Server2005索引碎片分析和解决方法

    摘要: SQL Server,为了反应数据的更新,需要维护表上的索引,因而这些索引会形成碎片.根据工作量的特征,这些碎片会影响对应的工作性能.此文帮助决定是否需要整理碎片以改善性能的信息.SQL Se ...

  8. t–sql pl–sql_SQL Server性能疑难解答的DBA指南–第2部分–监视实用程序

    t–sql pl–sql SQL Server探查器 (SQL Server Profiler ) SQL Server Profiler is a monitoring tool that you ...

  9. 转载SQL Server 数据库的性能优化

    你是否在千方百计优化SQL Server 数据库的性能?如果你的数据库中含有大量的表格,把这些表格分区放入独立的文件组可能会让你受益匪浅.SQL Server 2005引入的表分区技术,让用户能够把数 ...

最新文章

  1. (简要介绍)Winograd schema challenge(Winograd question)
  2. 【操作系统】进程的描述与控制(这知识它不进脑子啊~!)
  3. 线段树(成段更新,区间求和lazy操作 )
  4. Oracle日期转换处理
  5. ES6 for...of循环
  6. C语言编译过程总结详解
  7. Java nginx 双向ssl_使用Nginx实现HTTPS双向验证的方法
  8. MySQL官方备份_Mysqlbackup 备份详解(mysql官方备份工具)
  9. SpringBoot--自动装配原理详解及应用之Conditional注解
  10. Odoo(OpenErp) 收藏夹(私藏)
  11. Altium Designer画PCB详细教程
  12. 逻辑分析题目:“给你一个9升的水桶和一个4升的水桶,在河里取6升水”
  13. IDEA无法选择新安装字体
  14. PHP——四舍五入取整、向上取整、向下取整、小数截取
  15. 机器学习基础-正则化作用详解
  16. 正则,JWT token,容联云,celery,频道组,SKU,SPU,request对象的属性和方法的补充知识
  17. 如何去掉图片多余的部分?图片裁剪功能如何用?
  18. 计量经济学计算机答案第三章课后答案,复旦大学 经济学院 谢识予 计量经济学 计量经济学第三章思考练习题...
  19. 跟踪上传进度PHP和JavaScript
  20. pads单位切换的快捷键_pads快捷键和一些技巧

热门文章

  1. A damn at han’s Windows phone book 笔记(23:序列化,图片)
  2. 由replaceAll引发的java.util.regex.PatternSyntaxException错误
  3. java char 计算_经典Java面试题之Java中Char类型的运算
  4. 「镁客·请讲」吉影科技黄俊平:水下机器人市场的拓展,需要更多行业者协同并进...
  5. oracle 11g的启动和关闭
  6. futureTask的超时原理解析
  7. React Native商城项目实战04 - 封装TabNavigator.Item的创建
  8. 四步奠定SDN部署基石
  9. am335x 电容屏驱动添加。
  10. 生产环境下的负载均衡配置