oracle視圖和索引

視圖和索引

視圖

視圖的做用數據庫

  • 控制數據訪問、簡化查詢、避免重複訪問相同的數據

視圖的優勢函數

  • 限制用戶只能經過視圖檢索數據,用戶看不到底層基表

注意事項code

  • 視圖能夠理解爲臨時表,會隨着真實表的數據變化而自動變化
  • 視圖的名字以V_開頭,代表是視圖;
  • 視圖不提升任何效率
  • 視圖不佔用空間
  • 不是全部的視圖都能更改(若改動能對應的原來的表,則能夠,不然不能夠,好比用了聚合函數的,或者group by而來的)

簡單視圖

語法索引

create or replace view 視圖名 as select 語句;

create or replace:關鍵字,建立或者替換(若原來沒有,則建立,若已經有,則替換原來的)it

範例table

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
      ...

只讀視圖

語法test

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 操做

視圖管理

查看

查看指定用戶下的全部視圖select

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;

索引已刪除。
相關文章
相關標籤/搜索