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';---觸發單列索引。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章