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;
上一篇: mysql数据库,主键自增主键不连续
下一篇: Oracle学习3.0(数据库对象)