source:http://blog.youkuaiyun.com/WangZuolin/archive/2008/08/02/2758168.aspx
规划索引
一、创建索引的原因:索引加速了数据检索
1、对经常聚合的列建立索引会提高查询效率(Count(*).......,平均值,总和)
2、最好在高选择行的列(列或组合列上的大部分数据是唯一)上创建索引。
二、不创建索引的原因:消耗磁盘空间并招致开销和维护成本
1、当在已索引的列上修改数据时,SQL将会更新相关索引
2、维护索引需要时间和资源。一般不要创建不经常使用的索引
3、如果索引列上包括大量重复的数据,那么该索引就没有优势了。
三、聚集索引:如同电话薄
1、对于经常要搜索某一 范围内键值的列或则以排序次排序访问的列特别有效。每个表只能有一个聚集索引;创建聚集索引时,聚集索引需要工作空间大约为表大小的1.2倍。
2、主要用于经常需要更新的表以及排序列上。
四、非聚集索引:课本目录
1、在用户要求用多种方式搜索数据时,非聚集索引是非常有用的。非聚集索引最好是在数据选择性比较高的列上或列值唯一的列上创建。
2、非聚集索引应该建立在聚集索引之上,否则创建聚集索引时非聚集索引将被重建。
五、组合索引:
1、当两列或多列最适合作为一个键进行搜索时。
2、创建组合索引时,先定义唯一性最高的列。
六、使用索引的指导原则:
1、在经常要搜索的列上创建索引,例如:
主键所在列
外键或关联表中经常使用的列
搜索键值范围的列
以排序次排序访问的列
在聚合过程中被 划分为一组的列
2、不需要索引的列:
在查询中很少引用的列
包含很少唯一值的列。例如:性别
由text,ntext或image数据类型定义的列
七、决定需要索引的列:
1、数据
2、决定选择性 :具有高选择性的列是索引的好候选列
3、决定密度 :具有高密度的列是索引最糟糕的候选列(例如性别)
4、决定数据分布
八、添查删改对索引的影响
1、需要频繁进行数据读取的操作的数据库应该有更多的索引
2、需要频繁进行数据插入操作的数据库应该有较少的索引。
3、更新通常不会导致行移动。
4、删除行既会影响索引又会影响数据页