SQLServer之Index2

上一篇已经讲到了创建聚集索引和非聚集索引。这里再补充下聚集索引与非聚集索引的区别。

一张表只能建1个聚集索引,而理论上可以建249个非聚集索引。

这是因为建立了聚集索引后,物理数据将按索引页的顺序进行重新排列,而物理数据的排列只能按一种顺寻排列。

非聚集索引并不会引发物理数据重新排列。

索引维护

1、查看是否需要维护索引

DBCC SHOWCONTIG[{table_name|table_id|view_name|view_id},{index_name|index_id}]

{table_name|table_id|view_name|view_id}是指定要对其碎片信息进行检查的表和视图,若不指定则对当前数据库所有表和视图进行检查。

获取table_id或view_id可以用OBJECT_ID()函数

{index_name|index_id}是指定要对其碎片信息进行检查的索引,为指定以指定的表或视图为准。

获取index_id可以用SELECT id FROM sysindexes WHERE name = 'index_stuInfo'

例如:DBCC SHOWCONTIG(StudentInfo,index_stuInfo)

输出的信息为:

当扫描密度为100.00%时表示无碎片信息。

2、重构索引

当数据进行增删时,索引页数据可能会被影响,使得索引中的信息在数据库中分散开来,产生碎片信息。

通过重构索引,可以重新组织索引数据的存储,清楚碎片。

语法:DBCC DBREINDEX(['database.ower.table_name' [,index_name [, fillfactor]]])

index_name:指要进行重构的索引,若未指定或指定为'',则重构该表下所有索引。

这里对fillfactor(填充因子)解释下:填充因子的值从0到100可选,指定索引页面保留为空的百分比。

值为 100  时表示页将填满,所留出的存储空间量最小。一般使用 sp_configure  系统存储过程指
定的服务器范围的默认填充因子,在大多数情况下都是最佳的选择。 

例如:DBCC DBREINDEX(StudentInfo,index_stuInfo,80)

使用填充因子80对[StudentInfo]表的[index_stuInfo]索引进行重构。

3、整理索引碎片

使用DBCC INDEXDEFRAG({database_name|database_id},{table_name|table_id|view_name|view_id},{index_name|id})

例如:DBCC INDEXDEFRAG(Students,StudentInfo,index_stuInfo)

对Students数据库中的StudentInfo中的index_stuInfo索引进行碎片整理。

输出如图:

有时候索引的碎片信息太多了,对它进行整理还不如重构索引,可以根据索引的碎片信息量选择处理方式。

************************关于索引先写到这里,在实践中多运用才是真理***********************************

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2011-06-02 22:29  WILLPAN  阅读(536)  评论(0编辑  收藏  举报