Oracle中的索引

索引是用於加速數據存取的數據對象。合理的使用索引可以大大降低i/o次數,從而提高數據訪問性能。因爲索引是需要人力進行維護的,所以索引不是越多越好,也不能亂建。

1.  創建索引
(1). 單列索引
      單列索引是基於單個列所建立的索引。
      例:create index 索引名 on 表名(列名);
(2). 複合索引
      複合索引是基於兩列或是多列的索引。在同一張表上可以有多個索引,但是要求列的組合必須不同。
      例:create index emp_idx1 on emp (ename, job);
      例:create index emp_idx1 on emp (job, ename);

2.  使用原則
(1). 在大表上建立索引纔有意義。
(2). 在where子句或是連接條件上經常引用的列上建立索引。
(3). 索引的層次不要超過4層。
例:在customer表中,經常要使用名字查詢,在名字列創建索引。
      create index nameIndex on customer(name);
一般是在要經常查詢的列上建索引,如果複合索引,則把數據多的放在前面,數據少的放在後面。
例:create index empIndex on emp(ename, job);
例:create index customerIndex on customer(name, category);

3.  索引的缺點
(1). 建立索引,系統要佔用大約爲表1.2倍的硬盤和內存空間來保存索引。
(2). 更新數據的時候,系統必須要有額外的時間來同時對索引進行更新,以維持數據和索引的一致性。
實踐表明,不恰當的索引不但於事無補,反而會降低系統性能。因爲大量的索引在進行插入、修改和刪除操作時比沒有索引花費更多的系統時間。
比如在如下字段建立索引應該是不恰當的:
a. 很少或從不引用的字段;
b. 邏輯型的字段,如男或女(是或否)等。
綜上所述,提高查詢效率是以消耗一定的系統資源爲代價的,索引不能盲目的建立,這是考驗一個DBA是否優秀的很重要的指標。

4.  其它索引
(1). 按照數據存儲方式,可以分爲B*樹、反向索引、位圖索引;
(2). 按照索引列的個數分類,可以分爲單列索引、複合索引;
(3). 按照索引列值的唯一性,可以分爲唯一索引和非唯一索引。
(4). 此外還有函數索引,全局索引,分區索引等。
在不同的情況,我們會在不同的列上建立索引,甚至建立不同種類的索引,請記住,技術是死的,人是活的。
比如 B*樹索引建立在重複值很少的列上,而位圖索引則建立在重複值很多、不同值相對固定的列上。

5.  顯示索引信息
(1). 顯示錶的所有索引
      在同一張表上可以有多個索引,通過查詢數據字典視圖dba_indexs和user_indexs,可以顯示索引信息。其中dba_indexs用於顯示數據庫所有的索引信息,而user_indexs用於顯示當前用戶的索引信息。
例:select index_name, index_type from user_indexes where table_name = '表名';
(2). 顯示索引列
      通過查詢數據字典視圖user_ind_columns,可以顯示索引對應的列的信息。
例:select table_name, column_name from user_ind_columns where index_name = 'IND_ENAME';
也可以通過pl/sql developer工具查看索引信息。

發佈了86 篇原創文章 · 獲贊 1 · 訪問量 46萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章