Oracle索引(Index)建立使用
Oracle物件教程:索引(Index)建立使用,索引:對資料庫表中的某些列進行排序,便於提高查詢效率。
當我們在某本書中查詢特定的章節內容時,可以先從書的目錄著手,找到該章節所在的頁碼,然後快速的定位到該頁。這種做法的前提是頁面編號是有序的。如果頁碼無序,就只能從第一頁開始,一頁頁的查找了。
資料庫中索引(Index)的概念與目錄的概念非常類似。如果某列出現在查詢的條件中,而該列的資料是無序的,查詢時只能從第一行開始一行一行的匹配。建立索引就是對某些特定列中的資料排序,生成獨立的索引表。在某列上建立索引後,如果該列出現在查詢條件中,Oracle會自動的引用該索引,先從索引表中查詢出符合條件記錄的ROWID,由於ROWID是記錄的實體地址,因此可以根據ROWID快速的定位到具體的記錄,表中的資料非常多時,引用索引帶來的查詢效率非常可觀。
·如果表中的某些欄位經常被查詢並作為查詢的條件出現時,就應該考慮為該列建立索引。
·當從很多行的表中查詢少數行時,也要考慮建立索引。有一條基本的準則是:當任何單個查詢要檢索的行少於或者等於整個錶行數的10%時,索引就非常有用。
Oracle資料庫會為表的主鍵和包含唯一約束的列自動建立索引。索引可以提高查詢的效率,但是在資料增刪改時需要更新索引,因此索引對增刪改時會有負面影響。
語法結構:建立索引
CREATE [UNIQUE] INDEX index_name ON table_name(column_name[,column_name…]) |
語法解析:
1. UNIQUE:指定索引列上的值必須是唯一的。稱為唯一索引。
2. index_name:指定索引名。
3. tabl_name:指定要為哪個表建立索引。
4. column_name:指定要對哪個列建立索引。我們也可以對多列建立索引;這種索引稱為組合索引。
案例4:為EMP表的ENAME列建立建立唯一索引,為EMP表的工資列建立普通索引,把JOB列先變為小寫再建立索引。
程式碼演示:建立索引
SQL> CREATE UNIQUE INDEX UQ_ENAME_IDX ON EMP(ENAME); ① Index created SQL> CREATE INDEX IDX_SAL ON EMP(SAL); ② Index created SQL> CREATE INDEX IDX_JOB_LOWER ON EMP(LOWER(JOB)); ③ Index created |
程式碼解析:
① 為SCOTT.EMP表的ENAME列建立唯一索引。
② 為SCOTT.EMP表的SAL列建立索引。
③ 在查詢中可能經常使用job的小寫作為條件的表示式,因此建立索引時,可以先對JOB列中的所有值轉換為小寫後建立索引,而這時需要使用lower函式,這種索引稱為基於函式的索引。
在select語句查詢時,Oracle系統會自動為查詢條件上的列應用索引。索引就是對某一列進行排序,因此在索引列上,重複值越少,索引的效果越明顯。
Oracle可以為一些列值重複非常多且值有限的列(比如性別列)上建立點陣圖索引。關於Oracle更多的索引型別(比如反向鍵索引等),請參考Oracle官方文件。
一般,我們看到術語“索引”和“鍵”交換使用,但實際上這兩個是不同的。索引是儲存在資料庫中的一個物理結構,鍵純粹是一個邏輯概念。鍵代表建立來實施業務規則的完整性約束。索引和鍵的混淆通常是由於資料庫使用索引來實施完整性約束。
主鍵約束、唯一鍵約束和唯一索引的區別,總結如下:
(1)主鍵約束和唯一鍵約束均會隱式建立同名的唯一索引,當主鍵約束或者唯一鍵約束失效時,隱式建立的唯一索引會被刪除;
(2)主鍵約束要求列值非空,而唯一鍵約束和唯一索引不要求列值非空;
(3)相同欄位序列不允許重複建立索引