oracle索引怎么用 Oracle基本索引的分类(2)
二、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、尽量减少使用函数索引,能不用就不用,因为函数索引的维护代价比普通索引高;函数索引计算值可能大于原字段值,将消耗更多的存储空间