oracle11g——索引

索引简介

数据的目录,便于快速定位数据。减少IO读。索引是物理结构
--建立索引
create index ind_dep on dep_log(OPERATE_TAB);
--查询索引
select * from dba_indexes;
select ind.owner 拥有者,ind.index_name 索引名称,ind.index_type 索引类型,ind.table_name 表名 from dba_indexes ind;

索引的工作原理

在创建索引时,Oracle会对将要建立索引的字段进行排序,然后将对于rowid和字段数据一起存储在索引段中。
在查询数据时,在索引中查找相关数据,找到后根据保存在索引中的ROWID在表中直接找到特定数据。

索引分类

B树索引,位图索引,反向键索引,基于函数的索引

建立索引注意情况

索引的建立要合理,如果不合理会影响DML的操作速度。建立索引时应考虑一下情况;

1.索引应建立在where子句频繁使用的字段上。
2.键索行数低于总行数的15%
3.需要经常对某行排序,索引可以加快数据排序速度。
4.限制表的索引个数,索引是为了加快查询,但会降低DML操作。
5.不要在小表上建立索引。
6.为提高多表连接的性能,应在连接列上建立索引
7.因Oracle能够并行读取不同硬盘的数据,故可以将索引和对应的表分别放在不同硬盘中的表空间。这样在避免产生I/O冲突的情况下提高查询速度。


创建索引

建立B树索引(NORMAL);最常用,也是默认索引。以B树结构组织并存索引数据。

oracle会自动为表的主键列创建B树索引。
create index aa_bb_index on aa(bb) pctfree 25 tablespace users;
pctfree;指定将来insert操作所预留的空间
tablespace;指定表空间。
B树索引不适合列的基数小于1%的情况


建立位图索引(BITMAP);解决B树索引在些情况效率很低的情况

如性别字段里面只存储两个值,这时B树对表检索时就会返回一半的记录,效率太低。此时就需要建立位图索引
create bitmap index aa_bb_index on aa(bb);

建立反向键索引(REV)

对于表主键是递增的索引,其总会把数据添加在最后的叶子节点上,如果把前面的数据删除,
那前面的分支也不会被利用,这样就会造成索引数据分布不均。
反向就是把列值’1234’倒序转换‘4321’后再加入到
create index aa_bb_index on aa(bb) reverse;
修改成反向索引
alter index aa_bb_index rebuild reverse;

建立基于函数的索引(FUNCTION)

ORACLE对于大小写字符敏感,对于查询可以用select * from table_name where col= upper('aaaa');
采用这样的方法,都可以进行查询,但查询索引中不存在的值时,oracle还是会进行全表搜索,请对各行进行upper计算。
为了解决该问题,建立基于函数的索引。
函数索引也是子常规的B树索引,其索引是通过对表数据进行计算得到的。
create index emp_job_fun on emp(lower(job));
如果在查询条件中包含相同的函数,则系统会利用它来提高查询的执行效率。


修改索引

修改索引使用alter index

索引合并

alter index index_name coalesce deallocate unused;

重建索引

alter index index_name rebuild;

消除索引碎片化的两个方法:合并索引和重建索引。

删除索引

drop index index_name;




















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值