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