1. 程式人生 > >索引與檢視的建立與應用

索引與檢視的建立與應用

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

實驗步驟:

1、建立有特點的大資料表。
為了保證索引產生前後,查詢效果的正確比對,應建立一個存在大量資料的測試表。這個測試表的資料來源於SYS模式下的all_objects檢視,其中包括本資料庫例項中的全部物件的基本描述,具體包括物件的所有者、物件名稱、建立日期等資訊。
建立測試表的具體過程:
  1)以sys賬號登入資料庫

    cmd>sqlplus sys/

[email protected] 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/
[email protected]
;

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、檢視的應用小結
檢視優點:可以簡化應用,方便許可權管理,整合多來源資料、面向應用重組資料
檢視中只能在簡單檢視中進行更新,但有可能更新資料後導致檢視記錄數發生變化。

注意:部分建立程式碼由於之前檔案已經建立好,為了名稱一致,不再另建。