Oracle数据库对象——索引

本文深入解析了数据库索引的工作原理,包括如何通过B-树和B+树加速查询,以及索引的创建、管理和优化策略。同时,文章还讨论了创建索引的最佳实践和潜在的性能权衡。

索引是建立在表上的数据库对象,主要作用:加快对表的查询操作。

索引是如何加快查询速度的?

在创建索引时,先将索引列进行排序,并且将索引的结果放到储存索引所占的内存中。在查询数据时,如果不使用索引,需要将数据文件分块读入内存中。如果使用索引,只需要将索引文件读入内存,根据索引项找到元组地址,再根据地址,将元组读入内存。由于索引文件中只含有索引项和元组地址,文件很小,而索引项是经过排序的,所以索引可以快速地读入到内存,并且找到相应的元组地址。

实现原理:

B-树或者B+树

缺点:

一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。

根据索引列的值是否重复,可以分为唯一性索引和非唯一性索引。

根据索引列的数目,可以分为单行索引和复合索引。

按照索引列的数据组织方式,分为b-树索引(默认)、位图索引、反向索引和基于函数的索引。

适合创建索引的几种情况:

  • 表的数据量很大,但是每次访问返回的数据量小于总记录的2-4%
  • 字段的取值范围很大
  • 字段中包含大量的空值
  • 字段常出现再where子句中

不适合创建索引的情况

  • 表的数据量较小
  • 每次访问返回的数据量很大。
  • 表的更新比较繁琐
  • 字段基本不会用在where条件中

查看此用户有哪些索引

SCOTT@myh>select index_name from user_indexes;

创建索引

#唯一索引      create unique index 索引名 on 表名(列名)
SCOTT@myh>create unique index emp_ename_index on emp(ename);

Index created.

#非唯一索引 create index 索引名 on 表名(列名)
SCOTT@myh>create index emp_deptno_index on emp(deptno);

Index created.

#位图索引   create bitmap index 索引名 on 表名(列名)
SCOTT@myh>create bitmap index emp_job on emp(job);

Index created.

#反向索引   create index 索引名 on 表名(列名) reverse
SCOTT@myh>create index emp_comm on emp(comm) reverse;

Index created.

#函数索引   create index 索引名 on 表名(函数(列名))
SCOTT@myh>create index emp_empno on emp(lower(ename));

Index created

删除索引

SCOTT@myh>drop index emp_empno_index;

修改索引

SCOTT@myh>alter index emp_ename_index to emp_ename;

重建索引(为什么要重建索引https://www.jb51.net/softjc/126055.html

SCOTT@myh>alter index emp_ename_index rebuild;

清理碎片

SCOTT@myh>alter index emp_job coalesce;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值