欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oracle数据库对象——索引

程序员文章站 2022-06-02 15:42:14
...

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

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

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

实现原理:

B-树或者B+树

缺点:

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

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

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

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

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

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

不适合创建索引的情况

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

查看此用户有哪些索引

[email protected]>select index_name from user_indexes;

创建索引

#唯一索引      create unique index 索引名 on 表名(列名)
[email protected]>create unique index emp_ename_index on emp(ename);

Index created.

#非唯一索引 create index 索引名 on 表名(列名)
[email protected]>create index emp_deptno_index on emp(deptno);

Index created.

#位图索引   create bitmap index 索引名 on 表名(列名)
[email protected]>create bitmap index emp_job on emp(job);

Index created.

#反向索引   create index 索引名 on 表名(列名) reverse
[email protected]>create index emp_comm on emp(comm) reverse;

Index created.

#函数索引   create index 索引名 on 表名(函数(列名))
[email protected]>create index emp_empno on emp(lower(ename));

Index created

删除索引

[email protected]>drop index emp_empno_index;

修改索引

[email protected]>alter index emp_ename_index to emp_ename;

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

[email protected]>alter index emp_ename_index rebuild;

清理碎片

[email protected]>alter index emp_job coalesce;

 

相关标签: 索引