一.索引介绍
1、索引相当于目录
2、索引通过一组排序的索引关键字提高了搜索效率,而不是默认的全表扫描搜索方法。
3、索引编制要适度。 变多会影响删除修改的效率,变少会影响查询的效率。 希望在取值分散的列中生成索引,不要在同一表中生成过度的索引
4、索引的使用对用户是透明的,并且系统确定什么时候使用该索引。
5、Oracle支持多种类型的索引,可以按照列数、索引值是否唯一以及索引数据的组织格式对索引进行分类,以满足各表和查询条件的要求。 (请参阅附件)
a .单列索引和复合索引
b.B树索引(create index时的默认类型) ) ) ) ) ) ) ) ) b.B树索引) ) ) ) ) ) b ) ) ) ) ) ) ) )。
无论查询条件如何,b树索引中的所有叶节点都具有相同的深度,因此查询速度大致相同。 另外,b树索引可以满足严格查询、模糊查询、比较查询等各种查询条件
--Unique唯一的索引值是唯一的,但允许为空值。 主键缺省具有唯一的索引,但列不能为空
- -非唯一:非唯一索引。 索引值是可重复的,允许为空。 缺省情况下,Oracle创建的索引不是唯一的
--Reverse Key :反向关键字索引。 通过在创建索引时指定" REVERSE "关键字,可以创建反向密钥索引,以反向存储每个已索引数据列的数据
,但保留原始数据列的顺序
c .位图索引(列值范围较小,以便应用性别政治方面,而不是默认的b树索引) )。
c .函数索引
如果需要频繁访问某些函数或表达式,可以将其保存在索引中,并在下次访问时计算其值,从而大大增加WHERE子句中包含函数或表达式的次数
表达式查询操作的速度
b树索引和位图索引都可以用于函数索引。
二.索引管理原则
要使用索引,请遵循以下基本原则:
1 .不需要在小表格上建立索引。
2 .对于撒娇者,如果经常查询的记录数小于表中记录总数的15%,则可以建立索引。 该比率不是绝对的,与全表扫描速度成反比。
3 .可以对大多数列的值不重复的列创建索引。
4 .对于基数较大的列,适合建立b树索引;对于基数较小的列,适合建立位图索引。
5 .列中有许多null值,必须为经常查询所有非null记录的列创建索引。
6 .无法对长列和长原始列进行索引。
7 .必须在连接查询频繁的列上创建索引。
使用CREATE INDEX语句创建查询时,将最频繁执行查询的列放在其它列之前。
9 .维护索引需要开销,特殊情况下对表进行插入和删除操作时,要限制表中的索引数量。 对于主要读取的表,索引多很有用,但如果一个表经常更改,则需要减少索引。
10 .在将数据插入表格后,创建索引。 如果在加载数据之前创建了索引,则Oracle每次插入每行时都必须更改每个索引。
三.长类型(可保存2G )主要用于不需要搜索字符串的长字符串数据,使用varchar2类型进行字符搜索,使用pstat1.setCharacterStream )方法保存这么长的字符串资料请参考附件P26
四.编制索引成文法如下:
CREATE INDEX语句的语法如下:
create [ unique ]|[ bitmap ] index index _ name
on table _ name ([ column1[ ASC|desc ],column2
[ASC|DESC],…] | [express] )
[TABLESPACE tablespace_name]
[PCTFREE n1]
[storage(initialn2 ) ]
[NOLOGGING]
[NOLINE]
[NOSORT];
五、
1、要查看索引信息,请在all_indexs表中
2 .显示被引用为索引信息的列all_ind_columns
3、查看函数索引信息all_ind_expressions
4、oracle的智能性很高,有时即使编制索引也不用。 例如,在数据量较少的情况下,可能不使用索引
5、进行全表扫描时,不使用索引效率更高
6、由于查询可能使用缓存,如果发现运行速度更快,则您的sql可能更好,也可能使用了缓存
7、使用plsql的“解释计划”功能,可以比较执行计划的消耗量,编写更好的sql