Oracle索引的作用和用法


一、索引的概念

  一種獨立於表的模式對象,可以存儲在於表不同的磁盤或表空間中

  索引被刪除或損壞時,不會對表產生影響,其影響的只是查詢的速度(通過指針加速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)

     Oracle 索引的作用和用法_21號先鋒者-CSDN博客_oracle添加索引的作用

     查看Oracle的表中有哪些索引 - 漠漠顏 - 博客園 (cnblogs.com)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM