標籤:Oracle
四、同義字
(一)什麼是同義字
同義字實質上是指定方案對象的一個別名。通過屏蔽對象的名稱和所有者以及對分散式資料庫的遠程對象提供位置透明性,同義字可以提供一定程度的安全性。同時,同義字的易用性較好,降低了資料庫使用者的 SQL 陳述式複雜度。同義字允許基底物件重新命名或者移動,這時,只需對同義字進行重定義,基於同義字的應用程式可以繼續運行而無需修改。
你可以建立公用同義字和私人同義字。其中,公用同義字屬於 PUBLIC 特殊使用者組,資料庫的所有使用者都能訪問;而私人同義字包含在特定使用者的方案中,只允許特定使用者或者有基底物件存取權限的使用者進行訪問。
同義字本身不涉及安全,當你賦予一個同義字對象許可權時,你實質上是在給同義字的基底物件賦予許可權,同義字只是基底物件的一個別名。
(二)建立與使用同義字
建立同義字的具體文法是:
create [public] SYNONYM synooym for object;
其中 synonym 表示要建立的同義字的名稱,object 表示表,視圖,序列等我們要
建立同義字的對象的名稱。
(三)案例
1.私人同義字
需求:為表 T_OWNERS 建立( 私人 )同義字 名稱為 OWNERS
語句:
create synonym OWNERS for T_OWNERS;
使用同義字:
select * from OWNERS ;
查詢結果如下:
2.公有同義字
需求:為表 T_OWNERS 建立( 公有 )同義字 名稱為 OWNERS2:
create public synonym OWNERS2 for T_OWNERS;
以另外的使用者登陸,也可以使用公有同義字:
select * from OWNERS2 ;
五、索引
(一)什麼是索引
索引是用於加速資料存取的資料對象。合理的使用索引可以大大降低 i/o 次數,從而提高資料訪問效能。
索引是需要佔據儲存空間的,也可以理解為是一種特殊的資料。形式類似於的一棵“樹”,而樹的節點儲存的就是每條記錄的物理地址,也就是我們提到的偽列(ROWID)
(二)普通索引
文法:
create index 索引名稱 on 表名(列名);
需求:我們經常要根據業主名稱搜尋業主資訊,所以我們基於業主表的 name 字
段來建立索引。語句如下:
create index index_owners_name on T_OWNERS(name)
索引效能測試:
建立一個兩個欄位的表
create table T_INDEXTEST (ID NUMBER,NAME VARCHAR2(30));
編寫 PL/SQL 插入 100 萬條記錄(關於 PL/SQL 我們在第四章會學到)
BEGINFOR i in 1..1000000loopINSERT INTO T_INDEXTEST VALUES(i,‘AA‘||i);end loop;commit;END;
建立完資料後,根據 name 列建立索引
CREATE INDEX INDEX_TESTINDEX on T_INDEXTEST(name)
執行下面兩句 SQL 執行
SELECT * from T_INDEXTEST where ID=765432;SELECT * from T_INDEXTEST where NAME=‘AA765432‘;
我們會發現根據 name 查詢所用的時間會比根據 id 查詢所用的時間要短
(三)唯一索引
如果我們需要在某個表某個列建立索引,而這列的值是不會重複的。這是我們可
以建立唯一索引。
文法:
create unique index 索引名稱 on 表名(列名);
需求:在業主表的水表編號一列建立唯一索引
語句:
create unique index index_owners_watermeter onT_OWNERS(watermeter);
(四)複合索引
我們經常要對某幾列進行查詢,比如,我們經常要根據學曆和性別對學員進行搜
索,如果我們對這兩列建立兩個索引,因為要查兩棵樹,查詢效能不一定高。那
如何建立索引呢?我們可以建立複合索引,也就是基於兩個以上的列建立一個索
引 。
文法:
create index 索引名稱 on 表名(列名,列名.....);
根據地址和門牌號對學員表建立索引,語句如下:
create index owners_index_ahon T_OWNERS(addressid,housenumber);
(五)反向鍵索引
應用情境:當某個欄位的值為連續增長的值,如果構建標準索引,會形成歪脖子
樹。這樣會增加查詢的層數,效能會下降。建立反向鍵索引,可以使索引的值變
得不規則,從而使索引樹能夠均勻分布。
文法:
create index 索引名稱 on 表名(列名) reverse;
(六)位元影像索引
使用情境:位元影像索引適合建立在低基數列上
位元影像索引不直接儲存 ROWID,而是儲存位元組位到 ROWID 的映射
優點:減少回應時間,節省空間的佔用
文法:
create bitmap index 索引名稱 on 表名(列名);
需求:我們在 T_owners 表的 ownertypeid 列上建立位元影像索引,語句:
create bitmap index index_owners_typeidon T_OWNERS(ownertypeid)
六、總結
(一)知識點總結
(二)上機任務布置
基於 scott 使用者聯絡各種資料庫物件的建立。
因為 scott 使用者權限較低,而建立各種資料庫物件需要較高許可權,所以需要賦予
[img=794,58]
scott 使用者 dba 許可權
grant dba to scott
- 建立視圖 view_emp,顯示僱員表中的 EMPNO ENAME JOB
- 建立帶約束的視圖 view_emp30,顯示部門編號為 30 的僱員資訊。
- 建立唯讀視圖,顯示部門表中的資訊。
- 建立物化視圖(自動重新整理),顯示僱員編號、僱員名稱、僱員職位和僱員部
門。
- 建立物化視圖(手動重新整理),查詢列出各部門的部門名和部門經理名字。並
編寫手動重新整理命令。
- 編寫序列 seq_1 ,從 100 開始 ,增長 10 ,最大值 1000,最小值 10 ,迴圈 。
- 編寫序列 seq_2 ,最大值 100 ,最小值 5,增長值 5 ,不迴圈。
- 編寫序列 SEQ_EMP, 起始值 8000,增長 1 ,不迴圈,不緩衝。
- 編寫序列 SEQ_DEPT, 起始值 50,增長 10 ,不迴圈,緩衝 30。
- 根據僱員名稱對僱員表建立索引
- 根據部門編號和職位對僱員表建立索引
- 在獎金錶根據職位建立位元影像索引
13.為 EMP 表建立私人同義字
14.為 DEPT 表建立公有同義字
Oracle-day03 下