nosort:默认情况下,不使用该选项。则 oracle 在创建索引时对表中记录进行排序。如果表中数据已经是按该索引顺序排列的,则可以使用该选项
5、单列索引和复合索引一个索引可以由一个或多个列组成。基于单个列所创建的索引称为单列索引,基于两列或多列所创建的索引称为多列索引
b 树索引
b 树索引是 oracle 数据库中最常用的一种索引。当使用 create index语句创建索引时,默认创建的索引就是 b 树索引。b 树索引就是一棵二叉树,它由根、分支节点和叶子节点三部分构成。叶子节点包含索引列和指向表中每个匹配行的 rowid 值。叶子节点是一个双向链表,因此可以对其进行任何方面的范围扫描。b 树索引中所有叶子节点都具有相同的深度,所以不管查询条件如何,查询速度基本相同。另外,b 树索引能够适应各种查询条件,包括精确查询、模糊查询和比较查询
例:
创建B树索引,属于单列索引
create index idx_emp_job on emp(job)
创建B树索引,属于复合索引
create index idx_emp_nameorsal on emp(ename,sal)
创建唯一的B树索引,属于单列索引
create unique index idx_emp_ename on emp(ename)
创建反向索引
create index index_two on emp(mgr) reverse;
如果表已存在大量的数据,需要规划索引段
create index idx_emp_nameorsal on emp(ename,sal) pctfree 30 tablespace users
删除索引
drop index idx_emp_job
drop index idx_emp_nameorsal
drop index idx_emp_ename
6、位图索引在 B 树索引中,保存的是经排序过的索引列及其对应的 ROWID 值。但是对于一些基数很小的列来说,这样做并不能显著提高查询的速度。所谓基数,是指某个列可能拥有的不重复值的个数。比如性别列的基数为 2(只有男和女)。因此,对于象性别、婚姻状况、政治面貌等只具有几个固定值的字段而言,如果要建立索引,应该建立位图索引,而不是默认的 B 树索引
创建位图索引,单列索引
create bitmap index idx_bm_job on emp(job)
创建位图索引,复合索引
create bitmap index idx_bm_jobordeptno on emp(job,deptno)
删除位图索引
drop index idx_bm_job
drop index idx_bm_jobordeptno
7、函数索引函数索引既可以使用 B 树索引,也可以使用位图索引,可以根据函数或表达式的结果的基数大小来进行选择,当函数或表达式的结果不确定时采用B 树索引,当函数或表达式的结果是固定的几个值时采用位图索引
例:
创建B树类型的函数索引
create index idx_fun_emp_hiredate on emp(to_char(hiredate,'yyyy-mm-dd'))
创建位图类型的函数索引
Create bitmap index idx_fun_emp_job on emp(upper(job))
8、合并和重建索引表在使用一段时间后,由于用户不断对其进行更新操作,而每次对表的更新必然伴随着索引的改变,因此,在索引中会产生大量的碎片,从而降低索引的使用效率。有两种方法可以清理碎片:合并索引和重建索引。合并索引就是将 B 树叶子节点中的存储碎片合并在一起,从而提高存取效率,但这种合并并不会改变索引的物理组织结构重建索引相当于删除原来的索引,然后再创建一个新的索引,因此,CREAT INDEX 语句中的选项同样适用于重建索引。如果在索引列上频繁进行UPDATE 和 DELETE 操作,为了提高空间的利用率,应该定期重建索引
9、管理索引的原则使用索引的目的是为了提高系统的效率,但同时它也会增加系统的负担,进行影响系统的性能,因为系统必须在进行 DML 操作后维护索引数据。在新的 SQL 标准中并不推荐使用索引,而是建议在创建表的时候用主键替代。因此,为了防止使用索引后反而降低系统的性能,应该遵循一些基本的原则:
1. 小表不需要建立索引
2. 对于大表而言,如果经常查询的记录数目少于表中总记录数目的 15%时,可以创建索引。这个比例并不绝对,它与全表扫描速度成反比
3. 对于大部分列值不重复的列可建立索引
4. 对于基数大的列,适合建立 B 树索引,而对于基数小的列适合建立位图索引
PL/SQL编程 1、概述