董晓涛(David Dong)

博客园 首页 新随笔 联系 订阅 管理
 

SQL SERVER资料之七:数据库数据库规划索引

 

这是我初学时候的笔记,帖出来抛砖引玉!如果大家感觉有用的话,我将整理出下一个版本! 

CHAPTER 7 
创建并维护索引
1. 
创建索引:我们通过上一章的学习,对索引结构已经熟悉,以下我们将讨论索引的创建和从现有的索引上获取信息。
1
 创建和删除索引:
1
.创建索引:create index 创建索引(也可以使用企业管理器)
                    drop index  
删除索引(也可以使用企业管理器)
如果表中存在primary keyunique约束将在表上自动创建索引,其中primary key创建的是簇索引!
如果满足一定的条件,我们可以在视图上创建索引!但此时首先创建的索引一定要是唯一的簇索引,然后可以创建其它的索引!
在创建簇索引时所有现有的非簇索引都将被生建!
保持关键字较小!
.       2..
删除索引:drop index  删除索引(也可以使用企业管理器)
         
在删除表时,所有的索引都被删除。
         
在删除簇索引时,所有的非簇索引都将被重建。
         
在删除索引后,SQL SERVER将回收空间!
         
不能将PRIMARY KEYUNIQUE约束创建的索引删除,我们可以先删除约束,再删除索引
3.
创建唯一索引:它确保索引的列是唯一的!primary keyunique约束自动创建唯一索引!
4
.创建组合索引:我们可以指定多个列作为索引值,这时就称之为组合索引。如我们可以把姓和名两列建成组合索引。因为有很多人有相同的姓!它最多可以包括一个表中16个列,900字节(全必定来自一个表中),在使用时,必须使用索引的第一列,以使用组合索引!
5
.从现有的索引中获取信息:使用sp_helpindex系统存储过程(查看表的索引信息);使用sp_help系统存储过程(查看表的索引信息和其它方面的信息)
2.
创建索引选项:SQL SERVER提供的创建索引的选项可以加快索引的创建并可以增强索引在随时间改变的性能。
1
.使用fillfactor选项:我们可以使用fillfactor来优化簇索引和非簇索引的insertupdate性能。原理:当索引页充满时,SQL SERVER必须花费时间来分离以使有空间可以容纳新的行。我们的fillfactor选项就是指定在叶级索引页上分配自由空间百分比以减少页的分离!(SQL SERVER并不主动维护索引页上分配空间的比例,它只发生在索引被创建和重建时!);
在表中指定的填充因子的值与数据被修改(insertupdate语句)有频率有关和组织有关,如对OLTP使用较低的填充因子,而对于OLAP使用较高的填充因子!其中默认是全填充(0)!
0
100都为全填充而1-99为指定的比例填充!如我们为fillfactor指定为65%,那么这个百分比将决定叶级页有多少空间被填充,在这里是65%,为新行保留有35%的自由空间!
2
 使用pad_index选项:我们可以使用带有fillfactor选项的PAD_INDEX选项来在创建或是重建索引时优化性能!它指定按特定的比较填充非页级索引页的比例!(不讲)
3
.维护索引:我们在这里主要讲一下几种维护工具的使用
   
数据分片:当数据被修改时,SQL SERVER将重组索引页,这将导致索引页的页分离(索引页的调整就叫页分离)!我们可以通过删除并重建索引或者是重建索引并指定填充因素值来解决!
   DBCC SHOWCONTIG:
显示指定表中数据和索引的分片信息!
   DBCC INDEXDEFRAG:
在索引的页级整理碎片,是一个在线操作!如果碎片较严重时我们可以使用重建索引,这样可能较快一些!
   DROP_EXISTION:
改变索引定义或是重建索引除去并重新创建索引以重新组织索引,例如在大容量装载之后应用新的填充因子或重新组织数据。使用 CREATE INDEX  WITH DROP_EXISTING 子句完成这项工作会更有效,尤其对于聚集索引。除去聚集索引将导致重建所有非聚集索引。如果此后重新创建聚集索引,将再次重建非聚集索引以用聚集索引键替换行指针。CREATE INDEX  WITH DROP_EXISTING 子句可以对重建进行优化,以避免重建两次非聚集索引的开销。还可以使用 DBCC DBREINDEX,它具有不需要知道索引结构的优点。
4.
统计介绍:我们可以在索引上创建统计,也可以在列上创建统计。因为查询优化器使用统计来优化查询,所以我们有必要知道统计是如何获取,存储,创建,更新和浏览的!
   
获取:统计是列值的采样!SQL SERVER读取所有的列值或列值的采样,产生一个值的平均分布和分类列表(也叫分布步距)来获取统计。
   
存储:统计存储在sysindexes系统表的statblob列中!在表上创建索引时,SQL SERVER自动建立统计!statblob列中存储的每一个值 被为分布步距。
   
创建统计:可以自动的或者是人工的创建统计。我们应该应该允许SQL SERVER自动建立统计。也可以使用create statistics来创建直方图和相关密度值。Create statistics statistics_name on {table|view}(column[,…n])
   
更新:当统计信息变得过时时,应该更新统计信息。在列中的数据相对于改变数据的数据量来说,决定了更新的频率!对小于8M的数据SQL SERVER执行全扫描来收集统计,如果表比较大,只取样小量行!
   
浏览:通过执行dbcc show_statistics语句,可以在分布页中为索引或列浏览统计信息!
5
.查询sysindexes表:存储表和索引信息,存储统计信息!
6
.使用INDEX TUNING WIZARD建立索引:
INDEX TUNING WIZARD
可以帮助我们在一个新的数据库上创建合适的索引或在当在数据库上验证现有的索引!

--董晓涛

posted on 2004-11-26 11:37  董晓涛  阅读(554)  评论(0编辑  收藏  举报