我对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,这些情况需要进一步研究。 (编辑:ASP站长) 【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。 |
-
无相关信息