关键词搜索

源码搜索 ×
×

Oracle 视图和索引

发布2020-05-30浏览1853次

详情内容

一、视图

视图的概念:视图就是提供一个查询的窗口,所有数据来自于原表
语法 : 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);
    
    • 1
    • 2
    • 3
    • 4
    ---单列索引
    ---创建单列索引
    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';---触发单列索引。
    
      13
    • 14

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载