一、管理索引-原理介紹
索引是用於加速數據存取的數據對象。合理的使用索引可以大大降低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工具查看索引信息