關於索引更詳細的介紹請見鏈接:https://www.csdn.net/gather_22/MtTaQg3sODM1Mi1ibG9n.html
索引說明:
索引是數據庫對象之一,用於加快數據的檢索,類似於書籍的索引。如果有一份10頁的賬單,請你找出賬單中客戶名=“小雨”的所有流水。如果沒有索引,你需要搜索整個賬單,因為不能保證只有一個‘小雨’的流水,必須全部搜索一遍,這種方法就相當於全表掃描檢索方式。但如果賬單前頁附有索引,里面有所有客戶名+rowid的索引條目,且按客戶名升序排列,你只需要檢索索引頁,就可以直接查到對應的記錄,這就是索引的工作原理。相比之下,索引可以有效的提高檢索速度。
-
索引在邏輯上和物理上都與相關的表和數據無關,當創建或者刪除一個索引時,不會影響基本的表。
-
索引一旦建立,在表上進行DML操作時(例如在執行插入、修改或者刪除相關操作時),oracle會自動管理索引,索引刪除,不會對表產生影響。
-
索引對用戶是透明的,無論表上是否有索引,sql語句的用法不變。
-
oracle創建主鍵時會自動在該列上創建索引。
索引創建語句:
- 單列索引:
create index index_name on table_name(column_name);
- 復合索引:
create index index_name on table_name(column_name1, column_name2, column_name, ...);
- 刪除索引:
drop index index_name;
- 查看某表的所有索引:
select * from all_index where table_name='表名';
- 查看某表中帶有索引的所有列:
select * from all_ind_columns where table_name='表名';
索引的建立原則:
- 索引應該建立在WHERE子句中經常使用的列上。如果某個大表經常使用某個字段進行查詢,並且檢索的行數少於5%,則應該考慮在該列上建立索引。
- 對於兩個表連接的字段應該建立索引。
- 如果經常在某個表的字段上進行order by 的話,則也應該在這個列上建立索引。
- 小表數據很少使用全表掃描速度已經很快,沒必要建立索引。
索引的優點:
- 很大的提高了數據檢索的速度;
- 創建唯一索引能夠保證數據庫表中每一行數據的唯一性(唯一約束性)。
- 提高表與表之間的連接速度。