您现在的位置: 万盛学电脑网 >> 程序编程 >> 数据库 >> sql server教程 >> 正文

如何提高SQLSERVER的性能

作者:佚名    责任编辑:admin    更新时间:2022-06-22

 

如何提高sql server的性能www.c hinaitpower.comlSu2tX

 www.c hinaitpower.comlSu2tX

第一篇:通过维护表的索引来提高数据的访问速度www.c hinaitpower.comlSu2tX

 www.c hinaitpower.comlSu2tX

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

 www.c hinaitpower.comlSu2tX

   索引的体系结构:www.c hinaitpower.comlSu2tX

 www.c hinaitpower.comlSu2tX

为什么要不断的维护表的索引?首先,简单介绍一下索引的体系结构。SQL Server在硬盘中用8KB页面在数据库文件内存放数据。缺省情况下这些页面及其包含的数据是无组织的。为了使混乱变为有序,就要生成索引。生成索引后,就有了索引页和数据页,数据页保存用户写入的数据信息。索引页存放用于检索列的数据值清单(关键字)和索引表中该值所在纪录的地址指针。索引分为簇索引和非簇索引,簇索引实质上是将表中的数据排序,就好像是字典的索引目录。非簇索引不对数据排序,它只保存了数据的指针地址。向一个带簇索引的表中插入数据,当数据页达到100%时,由于页面没有空间插入新的的纪录,这时就会发生分页,SQL Server 将大约一半的数据从满页中移到空页中,从而生成两个半的满页。这样就有大量的数据空间。簇索引是双向链表,在每一页的头部保存了前一页、后一页地址以及分页后数据移动的地址,由于新页可能在数据库文件中的任何地方,因此页面的链接不一定指向磁盘的下一个物理页,链接可能指向了另一个区域,这就形成了分块,从而减慢了系统的速度。对于带簇索引和非簇索引的表来说,非簇索引的关键字是指向簇索引的,而不是指向数据页的本身。www.c hinaitpower.comlSu2tX

为了克服数据分块带来的负面影响,需要重构表的索引,这是非常费时的,因此只能在需要时进行。可以通过DBCC SHOWCONTIG来确定是否需要重构表的索引。下面举例来说明DBCC SHOWCONTIG和DBCC REDBINDEX的使用方法。以SQL Server自带的northwind数据作为例子www.c hinaitpower.comlSu2tX

  带开SQL Server的Query analyzer输入命令:www.c hinaitpower.comlSu2tX

use northwindwww.c hinaitpower.comlSu2tX

declare @table_id intwww.c hinaitpower.comlSu2tX

set @table_id=object_id('orders')www.c hinaitpower.comlSu2tX

dbcc showcontig(@table_id)www.c hinaitpower.comlSu2tX

这个命令显示northwind数据库中的orders表的分块情况,结果如下:www.c hinaitpower.comlSu2tX

 www.c hinaitpower.comlSu2tX

 www.c hinaitpower.comlSu2tX

 www.c hinaitpower.comlSu2tX

DBCC SHOWCONTIG scanning 'Orders' table...www.c hinaitpower.comlSu2tX

Table: 'Orders' (21575115); index ID: 1, database ID: 6www.c hinaitpower.comlSu2tX

TABLE level scan performed.www.c hinaitpower.comlSu2tX

- Pages Scanned................................: 20www.c hinaitpower.comlSu2tX

- Extents Scanned..............................: 5www.c hinaitpower.comlSu2tX

- Extent Switches..............................: 4www.c hinaitpower.comlSu2tX

- Avg. Pages per Extent........................: 4.0www.c hinaitpower.comlSu2tX

- Scan Density [Best Count:Actual Count].......: 60.00% [3:5]www.c hinaitpower.comlSu2tX

- Logical Scan Fragmentation ..................: 0.00%www.c hinaitpower.comlSu2tX

- Extent Scan Fragmentation ...................: 40.00%www.c hinaitpower.comlSu2tX

- Avg. Bytes Free per Page.....................: 146.5www.c hinaitpower.comlSu2tX

- Avg. Page Density (full).....................: 98.19%www.c hinaitpower.comlSu2tX

DBCC execution completed. If DBCC printed error messages, contact your system administrator.www.c hinaitpower.comlSu2tX

通过分析这些结果可以知道该表的索引是否需要重构。表1.1描述了每一行的意义www.c hinaitpower.comlSu2tX

 www.c hinaitpower.comlSu2tX

 www.c hinaitpower.comlSu2tX

 www.c hinaitpower.comlSu2tX

 www.c hinaitpower.comlSu2tX

 www.c hinaitpower.comlSu2tX

 www.c hinaitpower.comlSu2tX

 www.c hinaitpower.comlSu2tX

 信息                          描述www.c hinaitpower.comlSu2tX

Pages Scanned                    表或索引中的长页数www.c hinaitpower.comlSu2tX

Extents Scanned                            &nbs