Oracle 视图和索引

一、视图

视图的概念:视图就是提供一个查询的窗口,所有数据来自于原表
语法 : CREATE VIEW 视图名称 AS 子查询

---查询语句创建表
create table emp as select * from scott.emp;
select * from emp;
---创建视图【必须有dba权限】
create view v_emp as select ename, job from emp;
---查询视图
select * from v_emp;
---修改视图[不推荐],实际的数据也会改变
update v_emp set job='CLERK' where ename='ALLEN';
commit;
---创建只读视图
create view v_emp1 as select ename, job from emp with read only;

视图的作用?
第一:视图可以屏蔽掉一些敏感字段。
第二:保证总部和分部数据及时统一。(总部操纵实际的表,分部查询视图这样保证数据的统一)

  • 语法 1: CREATE VIEW 视图名称 AS 子查询
  • 范例:建立一个视图,此视图包括了 20 部门的全部员工信息
    在这里插入图片描述
  • 语法 : CREATE OR REPLACE VIEW 视图名称 AS 子查询
    在这里插入图片描述
  • 一般不会去修改视图,我们可以设置视图为只读
  • 语法 3:CREATE OR REPLACE VIEW 视图名称 AS 子查询 WITH READ ONLY
    在这里插入图片描述

二、索引

索引是用于加速数据存取的数据对象。 合理的使用索引可以大大降低 i/o 次数,从而提高数据访问性能。
索引就是在表的列上构建一个二叉树,达到大幅度提高查询效率的目的,但是索引会影响增删改的效率。

  • 为什么添加了索引之后,会加快查询速度呢?
    图书馆:如果杂乱地放书的话检索起来就非常困难,所以将书分类,然后再建一个箱子,箱子里面放卡片,卡片里面可以按类查询,按书名查或者类别查,这样的话速度会快很多很多,这个就有点像索引。索引的好处就是提高你找到书的速度,但是正是因为你建了索引,就应该有人专门来维护索引,维护索引是要有时间精力的开销的,也就是说索引是不能乱建的。
    所以建索引有个原则:如果有一个字段如果不经常查询,就不要去建索引。现在把书变成我们的表,把卡片变成我们的索引,就知道为什么索引会快,为什么会有开销。

  • 单列索引:单列索引是基於单个列所建立的索引
    语法:CREATE index 索引名 on 表名(列名)

  • 复合索引:是基于两个列或多个列的索引。在同一张表上可以有多个索引,但是要求列的组合必须不同
    在这里插入图片描述

  • 索引的使用原则:
    在大表上建立索引才有意义;在 where 子句后面或者是连接条件上的字段建立索引;表中数据修改频率高时不建议建立索引;

范例:给 person 表的 name 建立索引
create index pname_index on person(name);
范例:给 person 表创建一个 name 和 gender 的索引
create index pname_gender_index on person(name, gender);
---单列索引
---创建单列索引
create index idx_ename on emp(ename);
---单列索引触发规则,条件必须是索引列中的原始值。
---单行函数,模糊查询,都会影响索引的触发。
select * from emp where ename='SCOTT'
---复合索引
---创建复合索引
create index idx_enamejob on emp(ename, job);
---复合索引中第一列为优先检索列
---如果要触发复合索引,必须包含有优先检索列中的原始值。
select * from emp where ename='SCOTT' and job='xx';---触发复合索引
select * from emp where ename='SCOTT' or job='xx';---不触发索引
select * from emp where ename='SCOTT';---触发单列索引。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章