如果也包含聚集索引,该聚集索引将被用于查找新行将要处于什么位置,随后,聚集索引、以及非聚集索引将被更新 。
3)非聚集索引与删除操作
如果在删除命令的Where子句中包含的列上,建有非聚集索引,那么该非聚集索引将被用于查找数据行的位置,数据删除之后,位于索引叶子上的对应记录也将被删除 。
如果该表上有其它非聚集索引,则它们叶子结点上的相应数据也要删除 。
如果删除的数据是该数所页中的唯一一条,则该页也被回收,同时需要更新各个索引树上的指针 。
由于没有自动的合并功能,如果应用程序中有频繁的随机删除操作,最后可能导致表包含多个数据页,但每个页中只有少量数据 。
6.索引覆盖
索引覆盖是这样一种索引策略:当某一查询中包含的所需字段皆包含于一个索引中,此时索引将大大提高查询性能 。
包含多个字段的索引,称为复合索引 。索引最多可以包含31个字段,索引记录最大长度为600B 。
如果你在若干个字段上创建了一个复合的非聚集索引,且你的查询中所需Select字段及Where,Order By,Group By,Having子句中所涉及的字段都包含在索引中,则只搜索索引页即可满足查询,而不需要访问数据页 。
由于非聚集索引的叶结点包含所有数据行中的索引列值,使用这些结点即可返回真正的数据,这种情况称之为“索引覆盖” 。
在索引覆盖的情况下,包含两种索引扫描:
1)匹配索引扫描
此类索引扫描可以让我们省去访问数据页的步骤,当查询仅返回一行数据时,性能提高是有限的,但在范围查询的情况下,性能提高将随结果集数量的增长而增长 。
针对此类扫描,索引必须包含查询中涉及的的所有字段,另外,还需要满足:Where子句中包含索引中的“引导列”(Leading Column),例如一个复合索引包含A,B,C,D四列,则A为“引导列” 。
如果Where子句中所包含列是BCD或者BD等情况,则只能使用非匹配索引扫描 。
2)非配置索引扫描
正如上述,如果Where子句中不包含索引的导引列,那么将使用非配置索引扫描 。
这最终导致扫描索引树上的所有叶子结点,当然,它的性能通常仍强于扫描所有的数据页 。
[参考]
[1] http://manuals.sybase.com/onlinebooks/group-asarc/asg1200e/aseperf/@Generic__BookTextView/3358
[2] http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.adref.doc/adref235.htm
推荐阅读
- 金骏眉你真的了解吗? 金骏眉属于什么茶
- 卫生间装修风水注意问题 色彩装修需了解
- 汕头青袍彻底颠覆人们红袍印象
- 刚来的大神彻底干掉了代码中的if else...
- 开发者必须了解的22个常用小程序开发api接口
- 通过监控DNS记录,来保护网站的几种方式?你需要了解
- 通过路由器配置DHCP服务实现IP地址分配,一分钟了解下
- 益生菌是什么?一起来了解下
- 高速开车的禁忌你了解吗?这五大要点要牢记
- 了解每种茶叶的特性 泡出好茶
