oracle视图和索引
Posted 冥思苦想
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle视图和索引相关的知识,希望对你有一定的参考价值。
视图和索引
视图
视图的作用
- 控制数据访问、简化查询、避免重复访问相同的数据
视图的优点
- 限制用户只能通过视图检索数据,用户看不到底层基表
注意事项
- 视图可以理解为临时表,会随着真实表的数据变化而自动变化
- 视图的名字以V_开头,表明是视图;
- 视图不提高任何效率
- 视图不占用空间
- 不是所有的视图都能更改(若改动能对应的原来的表,则可以,否则不可以,比如用了聚合函数的,或者group by而来的)
简单视图
语法
create or replace view 视图名 as select 语句;
create or replace
:关键字,创建或者替换(若原来没有,则创建,若已经有,则替换原来的)
范例
SQL> create or replace view v_emp as
2 select empno, ename, job from emp;
视图已创建。
SQL> select * from v_emp;
EMPNO ENAME JOB
---------- -------------------- ------------------
7777 S_HH%GGH CLERK
7369 SMITH CLERK
7499 ALLEN SALESMAN
...
只读视图
语法
create or replace view 视图名
as select 语句
with read only;
范例
SQL> create or replace view v_emp2 as
2 select empno,ename,job from emp
3 with read only;
视图已创建。
SQL> delete from v_emp2;
delete from v_emp2
*
第 1 行出现错误:
ORA-42399: 无法对只读视图执行 DML 操作
视图管理
查看
查看指定用户下的所有视图
SQL> select view_name from dba_views where owner='SCOTT';
VIEW_NAME
------------------------------------------------------------
V_DEPT
V_DEPT_EMP
V_EMP
V_EMP2
dba_views
查看数据库下所有视图owner=‘SCOTT‘
指定用户view_name
显示视图的名称
删除
SQL> drop view v_emp;
视图已删除。
SQL> drop view v_emp2;
视图已删除。
SQL> select view_name from dba_views where owner='SCOTT';
VIEW_NAME
------------------------------------------------------------
V_DEPT
V_DEPT_EMP
索引
索引的作用
- 提高查询效率
索引的注意事项
- 限制索引的个数。索引只要提升查询速度,但会降低 DML 操作的速度
- 索引名字唯一,长度不超过32位
- 索引列可以不止一列(组合索引或者复合索引),但唯一性高的在第一位(即重复数据少)
- 给表初始化时,须先将索引drop或者unusable(先插入数据,后建索引)
- 索引名称以IND或者IDX开头;
普通索引
语法
create index 索引名 on 表名(列名);
范例
SQL> create index IND_emp_deptno on emp(deptno);
索引已创建。
唯一索引
语法
create unique index 索引名字 on 表名(列名);
范例
SQL> create unique index ind_indtest_id on ind_test(id);
索引已创建。
管理索引
查看
SQL> select index_name from user_ind_columns where table_name='EMP';
INDEX_NAME
------------------------------------------------------------
UNIQUE_EMP_ENAME
PK_EMP
SQL> select index_name from user_ind_columns where table_name='IND_TEST';
INDEX_NAME
------------------------------------------------------------
IND_INDTEST_ID
删除索引
SQL> drop index IND_emp_deptno;
索引已删除。
SQL> drop index IND_INDTEST_ID;
索引已删除。
以上是关于oracle视图和索引的主要内容,如果未能解决你的问题,请参考以下文章