oracle索引怎么用 Oracle基本索引的分类(2)

映芳 1172分享

  二、B*树索引(用于OLTP)

  B树索引是Oracle默认索引类型,也是最常用的索引,该类索引有许多好处:

  1、针对唯一值或小范围的数据的访问时非常快。特别适合与精度匹配查询与范围查询

  2、B*树可以自动进行平衡

  3、虽然过多的B树索引会影响DML操作,但是单个B*树索引对DML操作的影响是很小的

  4、大多数情况下,B*树索引可以随着数据量的增长而很好的进行扩展

  B*树单字段索引使用建议

  1、分析SQL语句中约束条件的字段

  2、如果条件字段不固定,可以针对单字段建立普通B*树索引

  3、针对可选性高的字段建立索引

  4、如果是多表连接,可以考虑在被驱动表上的连接字段加索引

  5、通过对SQL语句进行分析,查看执行计划来进行优化

  三、位图索引(用于OLAP)

  位图索引是用来改善基于有很少列值的行的访问速度,例如中国有十几亿人口,那么民族至于56个,那么针对民族代码就可以建立位图索引;

  在OLTP中一般不使用位图索引

  四、函数索引

  如下情况:WHERE 1=1 AND (sysdate-to_date(DT_TIME,'yyyymmddhh24miss'))*24*60<10

  在DT_TIME上面加上了索引,但是发现执行计划并没有按照索引来,这里其实是Oracle的一个缺陷了,

  例如:DT_TIME-7<sysdate 与 DT_TIME<sysdate+7 在我们看来是一样的,但是在Oracle眼里却是不一样的,前面的表达式不会走索引,而后面的表达式就会走索引

  针对上述情况,如果索引字段在函数里面,要么简历函数索引,要么就优化表达式。但是建立函数索引有一些限制

  函数索引限制:

  1、必须使用一个确定的函数定义基于该函数的索引,也就是说函数仅返回一个值

  2、必须使用返回可重复值的函数来定义基于该函数的索引,如sysdate就不行

  3、可以对基于函数的索引进行分区,但是对基于函数的全局分区索引来说,分区键不能是索引所基于的函数

  4、函数必须使用圆括号来定义,即使没有参数

  5、索引基于的函数不能包含聚合函数

  使用建议:

  1、不要轻易在字段前面加函数

  2、尽量不要将字段嵌入表达式中

  3、尽量减少使用函数索引,能不用就不用,因为函数索引的维护代价比普通索引高;函数索引计算值可能大于原字段值,将消耗更多的存储空间

相关文章

热门标签

424640