你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
没有找到相关结果
gogodiy - 天善智能数据库专家、Tableau爱好者 2015-10-23 回答
赞同来自: xiaowulai
要回复问题请先登录或注册
推荐一份编程学习资源,包含了各类编程语言学习进阶路线图、视频教程、配套书籍文档、数百份面经,各大厂面试真题。编程语言包括:Java、前端、PHP、Python、Linux运维、软件测试、数据解构与算法、C语言、go语言等
微信扫码关注公众号,发送 "编程"获取资源
1 个回复
gogodiy - 天善智能数据库专家、Tableau爱好者 2015-10-23 回答
赞同来自: xiaowulai
缺点:
书签查找(键查找)要求索引页面访问之外的数据页面访问。访问两组页面增加了查询逻辑读操作次数。而且,如果页面不在内存中,书签查找(键查找)可能需要在磁盘上的一个随机(非顺序)I/O操作来从索引页面跳转到数据页面,还需要必要的CPU能力来汇集这一数据并执行必要的操作。
为了从非聚集索引中获益,查询应该请求相对少的行。
如果请求的行相对较多,那么在有聚集索引的情况下,尽量指定走聚集索引。
使用聚集索引和表扫描时不存在书签查找(RID查找、键查找)。
书签查找(RID查找、键查找)的起因:
如果查询的各部分(不只是选择列表)中引用的列不都包含在使用的非聚集索引中,就会发生书签查找(键查找)。
解决书签查找(RID查找、键查找)
使用一个聚集索引:有局限性,因为一个表只能有一个聚集索引。
使用一个覆盖索引:要么添加到索引列,要么INCLUDE包含这些列。推荐首选
使用聚集索引列作为SELECT子句的查询列。
使用索引联接:
如果覆盖索引变得非常宽,使用多个窄索引的索引连接也可以作为避免书签查找(RID查找、键查找)的一种技术。
优点:
多个窄索引和宽的覆盖索引相比,可以为更大量的查询提供服务。
窄索引比宽的覆盖索引需要的维护开销更小。
通常来说,可以先创建窄索引,看优化器是否利用了多个窄索引的索引连接。如果没有的话,那就是用覆盖索引,尽量少用复合索引。
如果一个表没有聚集索引,只有非聚集索引,那么在查询一个大的结果集时,表扫描比通过非聚集索引再通过书签查找(RID查找、键查找)性能更好。