Oracle学习笔记(索引)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/czh500/article/details/89484704

Oracle学习笔记(索引)

平时我用mysql比较多,Oracle用的比较少,所以Oracle稍微生疏一些,这次拿Oracle来说。

前些天,又回顾了一下数据库相关的知识,也看了一些数据库中索引的一些文章,发现其实索引底层的一些东西还是有深度的,看的我想睡觉,今天先写一些索引的稍微基础一点的知识,索引复杂的东西,我暂时还没弄得很明白,等我后面搞明白了,再写点进一步的东西。

/*
Oracle学习笔记(索引)
模式(schema)中的一个数据库对象
索引作用:在数据库中用来加速对表的查询
通过使用快速路径访问方法快速定位数据,减少了磁盘的I/O
特点:
与表独立存放,但不能独立存在,必须属于某个表
由数据库自动维护,表被删除时,该表上的索引自动被删除
索引的作用类似于书的目录,几乎没有一本书没有目录,因此几乎没有一张表没有索引。
索引原理:索引页
*/
--
SELECT * FROM scott.address2;
/*
自动创建索引:
当在表中将一个字段定义成PRIMARY KEY或UNIQUE时,数
据库会自动创建一个对应的索引
*/

/*
手动创建索引:
用户可以创建索引以加速查询
*/
--CREATE INDEX 索引名 on 表名(字段名)
--手动创建索引(单一索引)

CREATE INDEX index_address2_name ON scott.address2(NAME);
--查询的时候使用索引(where条件使用建立了索引的字段)
SELECT * FROM scott.address2 WHERE NAME = '江西省赣州市于都县渡江大道XX号';

--手动创建索引(复合索引:基于多个列的索引)
CREATE INDEX index_emp_job_sal ON scott.emp(job, sal);
SELECT * FROM scott.emp ORDER BY job, sal;

--创建基于函数的索引
--在emp表的ename列上执行大小写无关的搜索
CREATE INDEX index_emp_upper_ename ON scott.emp(UPPER(ename));
--
SELECT * FROM scott.emp WHERE UPPER(ename)= '令狐冲';

--修改和删除索引

--重建索引:如果经常在索引列上执行DML操作,需要定期重建索引
ALTER INDEX index_address2_name REBUILD;

--删除索引
--oracle数据库语法:DROP INDEX 索引名
--mysql数据库语法:DROP INDEX 索引名 on 表名 或者ALTER TABLE 表名 DROP INDEX 索引名

DROP INDEX index_address2_name;

--为了删除索引,必须拥有索引或者拥有DROP ANY INDEX 权限

/*
数据库查询方式
1.全表扫描
2.通过索引查询数据
3.共享语句
*/

/*
索引的维护:
1.建立索引后,查询的时候需要在where条件中带索引的字段才可以使用索引
2.在经常查询的字段上面建立索引,不要在所有字段上面建立索引
3.因为索引是用来加快查询速度的,如果一张表经常做insert、delete、update,
而很少做select,不建议建立索引,因为Oracle需要对索引进行额外的维护
4.如果一张表字段很少,不建议建立索引
5.索引是由Oracle自动维护的。索引使用久了会产生索引碎片(磁盘碎片),
影响查询效果,所以使用久了需要手动进行维护(删除再重建)
*/

猜你喜欢

转载自blog.csdn.net/czh500/article/details/89484704