我对Oracle索引的认知
如果 查询中还有其它条件, 比如 d = :vd and e = :ve ....,但是d,e这些字段又不在索引中,那么在这些列上的过滤条件,需要回表后把这些值取出来才能判断,所以d,e这些列的selectivity是 不能乘到effective table selectivity里去的。
ceiling(clustering_factor * effective table selectivity)表示需要回表的次数。
所以上面索引访问的cost就是走某个索引,需要访问的数据块的个数。
当然,前面的讨论忽略了index skip scan这种情况,因为本人对index skip scan也不是很明白。
什么情况下会走skip scan?
select * from tx where a = :va and c = :vc 是不是会在c这个字段上也作一个skip scan呢?
同时也没有考虑in list iterate,这些情况需要进一步研究。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |