詳解 oracle 索引

一、管理索引-原理介紹

索引是用於加速數據存取的數據對象。合理的使用索引可以大大降低i/o次數,從而提高數據訪問性能。索引有很多種我們主要介紹常用的幾種:

為什麼添加了索引後,會加快查詢速度呢?

二、創建索引

1)、單列索引

單列索引是基於單個列所建立的索引

語法:create index 索引名 on 表名(列名);

eg、create index nameIndex on custor(name);

2)、複合索引

複合索引是基於兩列或是多列的索引。在同一張表上可以有多個索引,但是要求列的組合必須不同,比如:

create index emp_idx1 on emp(ename, job);

create index emp_idx1 on emp(job, ename);

以上這兩個索引是兩個不同的索引。

三、使用原則

1)、在大表上建立索引才有意義

2)、在where子句或是連接條件上經常引用的列上建立索引

3)、索引的層次不要超過4層

這裡能不能給學生演示這個效果呢?

如何構建一個大表呢?

四、索引的缺點

索引有一些先天不足:

1)、建立索引,系統要佔用大約為表1.2倍的硬盤和內存空間來保存索引。

2)、更新數據的時候,系統必須要有額外的時間來同時對索引進行更新,以維持數據和索引的一致性。

實踐表明,不恰當的索引不但於事無補,反而會降低系統性能。因為大量的索引在進行插入、修改和刪除操作時比沒有索引花費更多的系統時間。

比如在如下字段建立索引應該是不恰當的:

1. 很少或從不引用的字段;

2. 邏輯型的字段,如男或女(是或否)等。

綜上所述,提高查詢效率是以消耗一定的系統資源為代價的,索引不能盲目的建立,這是考驗一個DBA是否優秀的很重要的指標

五、其它索引

按照數據存儲方式,可以分為B*樹、反向索引、位圖索引;

按照索引列的個數分類,可以分為單列索引、複合索引;

按照索引列值的唯一性,可以分為唯一索引和非唯一索引。

此外還有函數索引,全局索引,分區索引...

對於索引我還要說:

在不同的情況,我們會在不同的列上建立索引,甚至建立不同種類的索引,請記住,技術是死的,人是活的。

比如:B*樹索引建立在重複值很少的列上,而位圖索引則建立在重複值很多、不同值相對固定的列上。

六、顯示索引信息

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工具查看索引信息


分享到:


相關文章: