索引
在数据库之中,索引是一种专门用于数据库查询操作性能的一种手段。在oracle之中为了维护这种
查询性能,需要对某一类数据进行指定结构的排列。但是在oracle之中,针对于不同的情况会有
不同的索引使用,本部分主要讲解oracle中的:B数索引、降序索引、位图索引、函数索引。
1、B树索引
B树索引(又写为:B*Tree)是最为基本的索引结构,在oracle之中默认建立的索引就是此类型
索引。一般B数索引在检索高基数数列(该列上的重复内容较少或没有)的时候可以提供高性能的
检索操作。
B-Tree索引由分支块和叶块组成。在树结构中,位于最底层底块被称为叶块,包含每个被索引列的
值和行所对应的rowid。在叶节点的上面是分支块,用来导航结构,包含了索引列(关键字)范围
和另一索引的地址。
创建B-Tree索引语法:
create index [用户名] 索引名称 on [用户名]表名称(列名称[ASC|DESC,...);
范例:在emp.sal字段上创建索引,但是需要注意的是,最好的索引是在高基数列上使用。
create index emp_sal_ind on c##soctt.emp(sal);
此时是手工创建了索引,如果现在表中的列上定义了主键或者唯一约束的时候,会自动创建索引。
select * from user_indexes;
select * from user_ind_columns;
讨论:索引一定可以提升性能吗?
在程序开发之中都会听到性能调优,实际上这个名词是骗傻子的。如果你写的程序数据量很大,
而且导出都是多表关联,那么你想提升性能也不好提升,最好的做法是通过冗余字段,减少多表
查询。
发现索引如果要正常操作,那么必须始终维持这一颗树。如果如果表需要被频繁修改,1秒修改100次
。每次都需要重复修改树。那么如果说现在又要求保持高速的查找,同时又要求可以接受频繁的更新
只有一个方法:用时间换空间,牺牲实时性。
2.降序索引
范例:在hiredate字段上设置降序索引
create index emp_hiredate_ind_desc on c##scott.emp(hiredate);
3.函数索引
范例创建函数索引
create index emp_ename_ind on c##scott.emp(lower(ename));
select * from emp where lower(ename)='smith'
4.位图索引:
如果说现在某一列上的数据都属于低基数列的时候,就可以利用位图索引来提升查询的性能,
例如:表示雇员的数据表上会存在部门编号的数据列,而在部门编号上现在只有三种取值,
在这种情况下位图索引是最合适的。
创建位图索引
create bitmap index [用户名.]索引名称 on 用户名.表名称(列名称);
范例:在deptno字段上创建位图索引
create bitmap index dept_deptno_ind on c##scott.dept(deptno);
删除索引
于索引本身需要进行自身数据结构的维护,所以一般而言会占用较大的磁盘空间。并且随着
表的增长,索引所占用的空间也会越来越大,那么对于数据库之中那些不经常使用的索引就
应该尽早删除。索引是以oracle对象存在的,所以用户可以直接利用drop语句进行索引删除。
语法:
drop index 索引名称;
drop index emp_sal_ind;
阅读(1694) | 评论(0) | 转发(0) |