当前位置:   article > 正文

Oracle 复合索引

oracle 复合索引

内容参考自http://yijiangyanyu.iteye.com/blog/1677694这篇文章,加上自己的理解。

复合索引,是指在一张表的多个字段上,复合建立一个索引,属于一个数据库对象。

(我觉得复合索引存在的意义是为了解决一张表需要多个字段去进行where条件的筛选,但是Oracle在扫描一张表的时候只能同时访问一个index,最优必然是主键索引,效率最高,但是有时候主键是sequence或者id之类的物理主键,不可能能作为业务的主键,而且很多时候,业务上的主键是多个字段组合起来保证唯一性,所以复合主键的出现就很有必要了)。

同时,复合Index还有一个很有趣的使用技巧

由于单列的B-tree Index不会储存值为null的数据,(因为B-tree Index是对键值进行order by的,null≠null,null也无法进行order by,因此index segement不储存null)在使用单列的index时,对于这个字段的where使用了is null则会使CBO使用全表扫描,(索引段里根本没有null,但是为什么会去对一个字段去进行is null的查询,比较不合理)

举个例子:

select *
  from table t
where t.id = 1
   and t.name = 'aa'
   and t.tel is null ;

以上语句,如果table有idx_id 或者idx_name 这两个单列Index,但是由于用tel is null 这个条件,因此我认为这个语句是绝对不会走index的,必然是full table scan

那这个时候既想要条件中出现is null 又想要走index的情况,就必须使用复合索引

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/984790
推荐阅读
相关标签
  

闽ICP备14008679号