首页 > 代码库 > 蛋疼的郁闷-聚集索引扫描、非聚集索引扫描、表扫描区别
蛋疼的郁闷-聚集索引扫描、非聚集索引扫描、表扫描区别
本文适用于对数据库索引有一定深入的攻城师阅读参考。
我们对于聚集索引扫描和表扫描比较容易理解的,但是对于非聚集索引扫描不太容易理解,这一点也往往容易使初学者感到很是困惑,原因是总认为没必要存在非聚集索引扫描,因为如果查询结果不具有高选择性的话,在聚集索引表中可以使用聚集索引扫描,在对表中会使用表扫描的,那么为什么要会存在非聚集索引扫描呢?
之所以有这样的问题,是因为我们没有考虑到一种情况,那就是查询结果如果被建有非聚集索引的字段覆盖或包含了,而此时where条件字段上的非聚集索引对于本次查询结果又不具有高选择性,那么你说查询优化器会选择怎样的查询计划呢?1、非聚集索引查找?这肯定不行,因为结果集不具有高选择性。2、聚集索引扫描(或表扫描)?答案也不是,因为前两者开销还是比较大的。我们的优化器何不选择该非聚集索引呢?只要对该该索引执行一次扫描,那么查询根本不用访问数据页,因为查询结果字段都被该索引覆盖或包含了,这个代价可比前两者小多了。
哈哈!
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。