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

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

[转载]大多数SQL Server表需要索引来提高数据的访问速度,如果没有索引,SQL Server

要进行表格扫描读取表中的每一个记录才能找到索要的数据。索引可以分为簇索引和非簇索

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

指针来提高数据的索引。

1. 索引的体系结构

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

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

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

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

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

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

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

时就会发生分页,SQL Server

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

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

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

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

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

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

时进行。可以通过DBCC SHOWCONTIG来确定是否需要重构表的索引。

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 在创建索引时将使用指定的起始

fillfactor。

同样在Query Analyzer中输入命令:

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

然后再用DBCC SHOWCONTIG查看重构索引后的结果:

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%。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue动态组件和组件缓存

一、切换组件案例 比如我们现在想要实现了一个功能: 点击一个tab-bar,切换不同的组件显示; 这个案例我们可以通过两种不同的实现思路来实现: 方式一:通过v-if来判断,显示不同的组件; 方式二…

hidl 原理分析_一个 health service 不生效问题引出的一点知识

从 Android P 开始,Google 开始推荐厂家再定制一个 health 。前不久遇到一个定制 health 中的信息未成功反应到 Framework 的问题,在分析解决问题的过程中,学习到了一点新知识,所以就在这篇文章里根据解决问题的流程做一个小小的记…

比较list集合相等的方法

1. 内容相同,不管顺序! public static boolean isListContentEquals(List<String> src, List<String> des){return src.containsAll(des) && des.containsAll(src);} 2.内容和顺序都完全一样 方法1: public static boolean isListsCompletelyEqual(List<…

Webpack的代码分包Vue3中定义异步组件分包refs的使用

一、默认的打包过程&#xff1a; 默认情况下&#xff0c;在构建整个组件树的过程中&#xff0c;因为组件和组件之间是通过模块化直接依赖的&#xff0c;那么webpack在打包时就会将组件模块打包到一起&#xff08;比如一个app.js文件中&#xff09;&#xff1b; 这个时候随着项…

经典JS

用apply把document当作this传入getId函数&#xff0c;帮助“修正”this; document.getElementById (function (func) {return function () {return func.apply(document, arguments);} })(document.getElementById);//调用 var getId document.getElementById; var div getI…

组件的v-model Mixin extends

一、组件的v-model 前面我们在input中可以使用v-model来完成双向绑定&#xff1a; 这个时候往往会非常方便&#xff0c;因为v-model默认帮助我们完成了两件事&#xff1b;v-bind:value的数据绑定 和 input的事件监听&#xff1b; 如果我们现在封装了一个组件&#xff0c;其…

springmvcget中文乱码_解决SpringMVC Controller 接收页面传递的中文参数出现乱码的问题...

新配置一个spring的MVC项目&#xff0c;发现对Get请求的中文参数出现了乱码&#xff1a;查看了SpingMVC中关于编码的配置(在web.xml中)&#xff0c;如下&#xff1a;encodingFilterorg.springframework.web.filter.CharacterEncodingFilterencodingutf-8forceEncodingtrueencod…

SQL学习之SELECT子句顺序

下面来总计下之前的随笔中所说过的所有的SELECT子句的顺序。 子句            说明            是否必须使用 SELECT 要返回的列或者表达式 是 FROM 从中检索数据的表 …

Vue3过渡动画实现

一、认识动画 在开发中&#xff0c;我们想要给一个组件的显示和消失添加某种过渡动画&#xff0c;可以很好的增加用户体验&#xff1a; React框架本身并没有提供任何动画相关的API&#xff0c;所以在React中使用过渡动画我们需要使用一个第三方库react-transition-group&…

linux退出 putty_使用putty远程连接linux防止关闭putty程序就停止

如题&#xff1a;有时候我们使用putty连接linux的时候执行某个命令运行程序的时候&#xff0c;关闭putty就会出现应用程序也关闭的情况&#xff1b;这里建议就使用如下命令nohup youcommand &(&可加可不加)这个时候默认会在你当前目录创建一个nohup中创建一个nohup.out…

在Linux下不使用密码远程登陆其他Linux

有时需要再一台Linux上登陆其他Linux服务器&#xff0c;通常可以直接使用SSH命令&#xff0c;加入两台服务器一台服务器A&#xff0c;IP地址192.168.1.2&#xff0c;另一 台服务器B&#xff0c;IP地址192.168.1.3&#xff0c;如果想从A服务器使用root用户登陆B服务器只需要在A服…

Vue3 Composition API(一)——setup、reactive、ref、readonly

一、Options API的弊端 在Vue2中&#xff0c;我们编写组件的方式是Options API&#xff1a; Options API的一大特点就是在对应的属性中编写对应的功能模块&#xff1b;比如data定义数据、methods中定义方法、computed中定义计算属性、watch中监听属性改变&#xff0c;也包括生…

pandas 读表格_pandas电子表格的读取(pandas中的read_excel)

上面那篇文章中&#xff0c;初步介绍了一个文本文件的读取&#xff1b;接下来介绍另外一种常见的本地数据格式&#xff0c;那就是Excel电子表格&#xff0c;如果读者在学习或者工作中需要使用Python分析某个Excel表格数据&#xff0c;改如何完成第一个的数据读取呢&#xff1f;…

dex文件格式二

一. dex文件头(1) magic value在DexFile.c dexFileParse函数中 会先检查magic opt啥是magic opt呢? 我们刚刚从cache目录拷贝出来的那个前面的dey 036就是magic opt在源码中会先解析magic opt,然后重设dexfile指针重设magic opt指针后开始解析magic value这 8 个 字节一般是…

Vue3 Composition API(二)——computed、watchEffect、setup中使用ref

一、computed 在前面我们讲解过计算属性computed&#xff1a;当我们的某些属性是依赖其他状态时&#xff0c;我们可以使用计算属性来处理 在前面的Options API中&#xff0c;我们是使用computed选项来完成的&#xff1b;在Composition API中&#xff0c;我们可以在 setup 函数中…

【Git】笔记1

学习廖雪峰Git教程的笔记 Git是什么&#xff1a; Git是目前世界上最先进的分布式版本控制系统 Git与Github的关系&#xff1a;github是一个用git做版本控制的项目托管平台&#xff0c;它为开源项目免费提供Git存储 Git的创建者&#xff1a;Linus&#xff0c;就是创建了linux的那…

支持字典_手把手教你学Python之字典

字典是一种无序可变的容器&#xff0c;字典中的元素都是"键(key):值(value)"对&#xff0c; “键”和“值”之间用冒号隔开&#xff0c;所有“键值对”放在一对大括号“{}”中&#xff0c;元素之间用逗号分隔。在同一个字典中&#xff0c;“键”必须是唯一的&#xf…

Vue3 Composition API(三)——生命周期钩子、Provide函数 和 Inject函数、封装Hook案例、setup顶层编写方式

一、生命周期钩子 我们前面说过 setup 可以用来替代 data 、 methods 、 computed 、watch 等等这些选项&#xff0c;也可以替代 生命周期钩子。 那么setup中如何使用生命周期函数呢&#xff1f; 可以使用直接导入的 onX 函数注册生命周期钩子&#xff1b; 二、Provide函数 和…

单尺度二维离散小波重构(逆变换)idwt2

clc,clear all,close all; load woman; %单尺度二维离散小波分解。分解小波函数haar [cA,cH,cV,cD]dwt2(X,haar); %单尺度二维离散小波重构(逆变换) Yidwt2(cA,cH,cV,cD,haar); figure; subplot(1,2,1),imshow(X,map),title(原始图像); subplot(1,2,2),imshow(Y,map),title(重构…

python导出数据顿号做分隔符_Python语言和matplotlib库做数据可视化分析

这是我的第51篇原创文章&#xff0c;关于数据可视化分析。阅读完本文&#xff0c;你可以知道&#xff1a;1 Python语言的可视化库—matplotlib?2 使用matplotlib实现常用的可视化&#xff1f;0前言数据记者和信息设计师&#xff0c;David McCandless&#xff0c;在他的TED演讲…