oracle視圖與索引


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

實驗步驟:

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


  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;

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

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


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

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

4、對比創建索引前后的查詢操作的差異
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';


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

小結:創建索引只對索引字段出現在where語句中有效。

3)創建owner索引后執行
    --創建索引
    CREATE INDEX idx_owner ON demoTable(owner);


    --執行查詢
    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';


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

5、索引的應用小結
   索引類似於座次表,是對數據(記錄中的特定字段的值)的位置進行排序優化后的樹狀存儲結構,
一定是在大數據的環境下有效
索引的優點:提高數據查詢指定字段  效率,先建立指定字段的索引,並且指定字段的值具有離散性高的特點
缺點:占用空間、降低數據更新的效率
適用於查詢多,更新少的大數據環境


6、創建視圖
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;

7、更新視圖
UPDATE vw_test set sal= 1000;
UPDATE vw_salSummary set avgSal=1000;

8、視圖的應用小結
視圖優點:可以簡化應用,方便權限管理,整合多來源數據、面向應用重組數據
視圖中只能在簡單視圖中進行更新,但有可能更新數據后導致視圖記錄數發生變化。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM