一、索引的概念
一種獨立於表的模式對象,可以存儲在於表不同的磁盤或表空間中
索引被刪除或損壞時,不會對表產生影響,其影響的只是查詢的速度(通過指針加速Oracle服務器的查詢速度、通過快速定位數據的方法,減少磁盤I/O)
索引的內建工作對用戶是透明的,由數據庫自動維護,我們只需要指定是否添加索引
索引是為表中字段添加的。當一個字段經常出現在WHERE中作為過濾條件,或 ORDER BY 或 DISTINCT中時可以為其添加索引以提高查詢效率。
在刪除一個表時,所有基於該表的索引會自動被刪除。
二、索引的類型(常用)
1、B-樹索引:按平衡樹結構組織的索引,是最常用的索引,也是默認創建的索引類型。B-樹索引占用空間多,適合索引值取值范圍廣(基數大)、重復率底的應用。
2、位圖索引:按位圖結構組織的索引,適合索引值取值范圍小(基數小),重復率高的應用。
三、創建索引
1、創建索引的情況:
①列中數值分布范圍很廣
②列經常在where子句或連接條件中出現
③表經常被訪問而且數據量很大,訪問的數據大概占數量總量的2% - 4%
④表經常更新
2、自動創建:在定義primary key 或 unique 約束后系統自動在相應的列上創建唯一索引
3、手動創建:用戶可以在其他列上創建非唯一的索引,以加快查詢
(1)單一索引
語法:create index 索引名 on 表名(字段名);
create index idx_emp_ename on emp(ename);
(2)復合索引:基於多個列的索引
語法:create index 索引名 on 表名(字段名1,字段名2);
create index idx_emp_job_sal on emp(job,sal);
(3)創建基於函數的索引
create index emp_ename_upper_idx on emp(upper(ename));
四、修改索引
1、重命名索引:
alter index stu_name_index rename to sname_index;
2、合並索引(表使用一段時間后在索引中會產生碎片,此時索引效率會降低,可以選擇重建索引或者合並索引,合並索引方式更好些,無需額外存儲空間,代價較低):
alter index stu_name_index coalesce;
3、重建索引:
方式一:刪除原來的索引,重新建立索引
方式二:alter index stu_name_index rebuild;
五、查詢索引
可以使用數據字典視圖user_indexes 和 user_ind_columns 查看索引的信息
查看索引個數和類別:select * from user_indexes where table='表名' ;
查看索引被索引的字段:select * from user_ind_columns where index_name=upper('&index_name');
我們可以通過類似下面的語句來查看一個表的索引的基本情況:
select user_ind_columns.index_name,user_ind_columns.column_name,
user_ind_columns.column_position,user_indexes.uniqueness
from user_ind_columns,user_indexes
where user_ind_columns.index_name = user_indexes.index_name
and user_ind_columns.table_name = ‘你想要查詢的表名字’;
六、刪除索引
使用 drop index 命名刪除索引:drop index stu_name_index;
注意:只有索引的擁有者或者drop any index權限的用戶才可以刪除索引;刪除操作時不可以回滾的
參考:oracle中索引的使用 - 一簾幽夢&nn - 博客園 (cnblogs.com)