动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库学院 > 数据库技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ 数据库技巧 ]的信息



本月文章推荐
.关于SQL Server SQL语句查询分页.
.当SQL Server数据库崩溃时如何恢.
.轻松接触 SQL Server的“数据同步.
.用SQL语句生成带有小计合计的数据.
.关于对sql2000查询结果进行相关度.
.SELECT查询的应用(一).
.分页SQLServer存储过程 .
..NET 2.0 SqlDependency快速上手.
.对 SQL Server 2005 自述文件的更.
.XML文件导入SQL Server 2000.
.如何将SQL Server表驻留内存和检.
.获取SQL Server的当前连接数.
.SQL Server端口更改后的数据库连.
.SQL--JOIN之完全用法.
.数据仓库工程师面试过程中经常遇.
.拷贝的SQL Server 7数据库的恢复.
.pl/sql developer中TIMESTAMP的显.
.如何使用PL/SQL读取数据库中的BL.
.删除无效的SQL SERVER组的几种方.
.适合数据库初学者学习的日期操作.

通过维护表的索引来提高数据的访问速度

发表日期:2007-8-19 |


大多数SQL Server表需要索引来提高数据的访问速度,如果没有索引,SQL Server要进行表格扫描读取表中的每一个记录才能找到索要的数据。索引可以分为簇索引和非簇索引,簇索引通过重排表中的数据来提高数据的访问速度,而非簇索引则通过维护表中的数据指针来提高数据的索引。
 
   索引的体系结构:
 
为什么要不断的维护表的索引?首先,简单介绍一下索引的体系结构。SQL Server在硬盘中用8KB页面在数据库文件内存放数据。缺省情况下这些页面及其包含的数据是无组织的。为了使混乱变为有序,就要生成索引。生成索引后,就有了索引页和数据页,数据页保存用户写入的数据信息。索引页存放用于检索列的数据值清单(关键字)和索引表中该值所在纪录的地址指针。索引分为簇索引和非簇索引,簇索引实质上是将表中的数据排序,就好像是字典的索引目录。非簇索引不对数据排序,它只保存了数据的指针地址。向一个带簇索引的表中插入数据,当数据页达到100%时,由于页面没有空间插入新的的纪录,这时就会发生分页,SQL Server 将大约一半的数据从满页中移到空页中,从而生成两个半的满页。这样就有大量的数据空间。簇索引是双向链表,在每一页的头部保存了前一页、后一页地址以及分页后数据移动的地址,由于新页可能在数据库文件中的任何地方,因此页面的链接不一定指向磁盘的下一个物理页,链接可能指向了另一个区域,这就形成了分块,从而减慢了系统的速度。对于带簇索引和非簇索引的表来说,非簇索引的关键字是指向簇索引的,而不是指向数据页的本身。
为了克服数据分块带来的负面影响,需要重构表的索引,这是非常费时的,因此只能在需要时进行。可以通过DBCC SHOWCONTIG来确定是否需要重构表的索引。下面举例来说明DBCC SHOWCONTIG和DBCC REDBINDEX的使用方法。以SQL Server自带的northwind数据作为例子
 带开SQL Server的Query analyzer输入命令:
use northwind
declare @table_id int
set @table_id=object_id('orders')
dbcc showcontig(@table_id)
这个命令显示northwind数据库中的orders表的分块情况,结果如下:
 
 
 
DBCC SHOWCONTIG scanning 'Orders' table...
Table: 'Orders' (21575115); index ID: 1, database ID: 6
TABLE level scan performed.
- Pages Scanned................................: 20
- Extents Scanned..............................: 5
- Extent Switches..............................: 4
- Avg. Pages per Extent........................: 4.0
- Scan Density [Best Count:Actual Count].......: 60.00% [3:5]
- Logical Scan Fragmentation ..................: 0.00%
- Extent Scan Fragmentation ...................: 40.00%
- Avg. Bytes Free per Page.....................: 146.5
- Avg. Page Density (full).....................: 98.19%
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
通过分析这些结果可以知道该表的索引是否需要重构。表1.1描述了每一行的意义
 
 
 
 
 
 
 
 信息                          描述
Pages Scanned                    表或索引中的长页数
Extents Scanned                               表或索引中的长区页数
Extent Switches                                DBCC遍历页时从一个区域到另
一个区域的次数
Avg. Pages per Extent                       相关区域中的页数
Scan Density                                    Best Count是连续链接时的理想区
[Best Count:Actual Count]                域改变数,Actual Count是实际区
域改变数,Scan Density为100%
表示没有分块。
Logical Scan Fragmentation            扫描索引页中失序页的百分比
Extent Scan Fragmentation               不实际相邻和包含链路中所有链
接页的区域数
Avg. Bytes Free per Page                  扫描页面中平均自由字节数
Avg. Page Density (full)                     平均页密度,表示页有多满
 
从上面命令的执行结果可以看的出来,Best count为3 而Actual Count为5这表明orders表有分块需要重构表索引。下面通过DBCC DBREINDEX来重构表的簇索引。
同样在Query Analyzer中输入命令:
use northwind
dbcc dbreindex('northwind.dbo.orders',pk_orders,90)
执行结果:
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Dbcc dbreindex参数说明:第一个参数为要重构的表明。第二个参数为需要重构的索引表识,‘’表示所有的索引。第三个参数为页的填充因子,填充因子越大,页越满。
然后再用DBCC SHOWCONTIG查看重构簇索引后的结果:
use northwind
declare @table_id int
set @table_id=object_id('orders')
dbcc showcontig(@table_id)
返回结果如下:
DBCC SHOWCONTIG scanning 'Orders' table...
Table: 'Orders' (21575115); index ID: 1, database ID: 6
TABLE level scan performed.
- Pages Scanned................................: 22
- Extents Scanned..............................: 3
- Extent Switches..............................: 2
- Avg. Pages per Extent........................: 7.3
- Scan Density [Best Count:Actual Count].......: 100.00% [3:3]
- Logical Scan Fragmentation ..................: 0.00%
- Extent Scan Fragmentation ...................: 33.33%
- Avg. Bytes Free per Page.....................: 869.2
- Avg. Page Density (full).....................: 89.26%
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
通过结果我们可以看到Scan Denity为100%表没有分块不需要重构表索引了。如果重构表的簇索引Scan Denity还小于100%的话可以重构表的全部索引。命令如下:
--use northwind
--dbcc dbreindex('northwind.dbo.orders',’’,90)
 
使用作业定时重构索引:
 
如果你的数据库访问非常频繁的话,非常容易出现数据分块的现象,因此你可以利用作业来帮你在系统相对空闲的时候重构你的索引。

上一篇:sql server2000还原模型的说明 人气:1896
下一篇:关于SQL Server 2000对XML支持的一些见解 人气:1591
浏览全部SQL Server的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-7-8 ECShop v2.6.0 Build 20080707(G
2008-7-8 动网论坛PHP版 v2.0++ Build 080
2008-7-8 中国IT总舵 v9.0 UTF版
2008-7-8 凹丫丫新闻发布系统 v4.6 Build
2008-7-8 topview数据查询 v3.0
2008-7-8 Z-Blog v1.8 Spirit Build 80708
2008-7-8 Z-Blog v1.8 Spirit Build 80708
2008-7-8 凹丫丫新闻发布系统 v4.6 Build
2008-7-8 新动软万能网站内容管理cms系统
2008-7-5 AgileMessenger即时通讯工具 v1.
2008-7-5 GoodCalculator2.0版固件计算器
2008-7-5 RepoName源地址搜索工具 v1.21b
2008-7-5 AgileMessenger即时通讯工具 v1.
2008-7-5 TouchCopy多媒体管理软件 v3.13完
2008-7-5 VideosTone视频铃声 v1.1汉化破解
2008-7-5 TouchPad触摸板 v4.44破解版
2008-7-5 VideosTone破解补丁 v1.0
2008-7-5 Feeds GoogleReader客户端 v0.4.3


  发表评论
姓 名: 验证码:
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報