oracle視圖與索引

實驗目的:
    一、理解索引和位圖索引的基本概念
    二、掌握索引和位圖索引的建立方法,並使用索引對查詢過程產生的影響進行分析
    三、理解視圖的基本概念
    四、掌握視圖的建立方法,並對視圖中數據查詢與更新進行操做,明確其使用的注意事項。

實驗步驟:

一、建立有特色的大數據表。
爲了保證索引產生先後,查詢效果的正確比對,應創建一個存在大量數據的測試表。這個測試表的數據來源於SYS模式下的all_objects視圖,其中包括本數據庫實例中的所有對象的基本描述,具體包括對象的全部者、對象名稱、建立日期等信息。
建立測試表的具體過程:
  1)以sys帳號登陸數據庫
    cmd>sqlplus sys/oracle321@orcl as sysdba  (注意sys登陸須要註明sysdba身份)
sql


  2)以建立查詢表的方式在scott模式下建立包括‘SYS’、‘PUBLIC’、‘SCOTT’三個用戶的所有對象
    SQL>  CREATE TABLE scott.DemoTable as
    SQL>2 SELECT * FROM all_objects
    SQL>3 WHERE owner IN ('SYS','PUBLIC','SCOTT');
     注意用戶名字母必須大寫。數據庫


  3) 切換到scott帳號進行下一步操做。
     conn scott/tiger@orcl;

二、查詢統計數據表的各數據量大小,瞭解大數據表中的基本狀況。
  1)瞭解測試表的字段構成
    DESC demoTable;

  1)查詢各用戶記錄數
    SELECT owner, count(*) 記錄數
    FROM demoTable
    GROUP BY owner;oracle


  2)查詢各列記錄值的個數
    SELECT count(DISTINCT owner) 全部者數量
        ,count(DISTINCT OBJECT_TYPE) 對象類型數量
        ,count(DISTINCT OBJECT_name) 對象名稱數量
    FROM demoTable;

三、分析表,開啓追蹤
analyze table demoTable compute statistics;
set autotrace trace explain  --開啓追蹤
注意:關閉追蹤的方法爲  set autotrace off;  

四、對比建立索引先後的查詢操做的差別
1)無索引時執行查詢(注意:名稱中字母都要大寫)
    SELECT * FROM demoTable where object_name = 'EMP';測試


    SELECT * FROM demoTable where owner ='SCOTT';

2)建立object_name索引後執行
    --建立索引
    CREATE INDEX idx_objectName ON demoTable(object_name);大數據


    --執行查詢
    SELECT * FROM demoTable where object_name = 'EMP';優化


    SELECT * FROM demoTable where owner ='SCOTT';ui


    SELECT count(*) FROM demoTable where owner ='SCOTT';

小結:建立索引只對索引字段出如今where語句中有效。

3)建立owner索引後執行
    --建立索引
    CREATE INDEX idx_owner ON demoTable(owner);spa


    --執行查詢
    SELECT * FROM demoTable where object_name = 'EMP';對象


    SELECT * FROM demoTable where owner ='SCOTT';排序


    SELECT count(*) FROM demoTable where owner ='SCOTT';


小結:建立索引在出現列值出現大量重複時無效,但對聚合操做有效。

4)建立位圖索引後執行
    --刪除原有owner索引
    DROP INDEX idx_owner;


    --建立位圖索引
    CREATE BITMAP INDEX idx_owner_bitmap ON demoTable(owner);


    --執行查詢
    SELECT * FROM demoTable where object_name = 'EMP';


    SELECT * FROM demoTable where owner ='SCOTT';


    SELECT count(*) FROM demoTable where owner ='SCOTT';


小結:位圖索引對聚合操做會產生影響

五、索引的應用小結
   索引相似於座次表,是對數據(記錄中的特定字段的值)的位置進行排序優化後的樹狀存儲結構,
必定是在大數據的環境下有效
索引的優勢:提升數據查詢指定字段  效率,先創建指定字段的索引,而且指定字段的值具備離散性高的特色
缺點:佔用空間、下降數據更新的效率
適用於查詢多,更新少的大數據環境


六、建立視圖
CREATE VIEW vw_test AS
select *
from emp
where sal+nvl(comm,0) > 2500;

CREATE VIEW vw_SalSummary as
select dname,avg(sal) avgSal,min(sal) minSal,max(sal) maxSal
from dept,emp
where dept.deptno = emp.deptno
group by dname;

七、更新視圖
UPDATE vw_test set sal= 1000;
UPDATE vw_salSummary set avgSal=1000;
八、視圖的應用小結視圖優勢:能夠簡化應用,方便權限管理,整合多來源數據、面向應用重組數據視圖中只能在簡單視圖中進行更新,但有可能更新數據後致使視圖記錄數發生變化。

相關文章
相關標籤/搜索