上一篇已经讲到了创建聚集索引和非聚集索引。这里再补充下聚集索引与非聚集索引的区别。
一张表只能建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索引进行碎片整理。
输出如图:
有时候索引的碎片信息太多了,对它进行整理还不如重构索引,可以根据索引的碎片信息量选择处理方式。
************************关于索引先写到这里,在实践中多运用才是真理***********************************