Oracle對象教程:索引(Index)創(chuàng)建使用,索引:對數(shù)據(jù)庫表中的某些列進行排序,便于提高查詢效率。
當(dāng)我們在某本書中查找特定的章節(jié)內(nèi)容時,可以先從書的目錄著手,找到該章節(jié)所在的頁碼,然后快速的定位到該頁。這種做法的前提是頁面編號是有序的。如果頁碼無序,就只能從第一頁開始,一頁頁的查找了。
數(shù)據(jù)庫中索引(Index)的概念與目錄的概念非常類似。如果某列出現(xiàn)在查詢的條件中,而該列的數(shù)據(jù)是無序的,查詢時只能從第一行開始一行一行的匹配。創(chuàng)建索引就是對某些特定列中的數(shù)據(jù)排序,生成獨立的索引表。在某列上創(chuàng)建索引后,如果該列出現(xiàn)在查詢條件中,Oracle會自動的引用該索引,先從索引表中查詢出符合條件記錄的ROWID,由于ROWID是記錄的物理地址,因此可以根據(jù)ROWID快速的定位到具體的記錄,表中的數(shù)據(jù)非常多時,引用索引帶來的查詢效率非??捎^。
·如果表中的某些字段經(jīng)常被查詢并作為查詢的條件出現(xiàn)時,就應(yīng)該考慮為該列創(chuàng)建索引。
·當(dāng)從很多行的表中查詢少數(shù)行時,也要考慮創(chuàng)建索引。有一條基本的準(zhǔn)則是:當(dāng)任何單個查詢要檢索的行少于或者等于整個表行數(shù)的10%時,索引就非常有用。
Oracle數(shù)據(jù)庫會為表的主鍵和包含唯一約束的列自動創(chuàng)建索引。索引可以提高查詢的效率,但是在數(shù)據(jù)增刪改時需要更新索引,因此索引對增刪改時會有負面影響。
語法結(jié)構(gòu):創(chuàng)建索引
CREATE [UNIQUE] INDEX index_name ON?
table_name(column_name[,column_name…])
語法解析:
1. UNIQUE:指定索引列上的值必須是唯一的。稱為唯一索引。
2. index_name:指定索引名。
3. tabl_name:指定要為哪個表創(chuàng)建索引。
4. column_name:指定要對哪個列創(chuàng)建索引。我們也可以對多列創(chuàng)建索引;這種索引稱為組合索引。
案例4:為EMP表的ENAME列創(chuàng)建創(chuàng)建唯一索引,為EMP表的工資列創(chuàng)建普通索引,把JOB列先變?yōu)樾懺賱?chuàng)建索引。
代碼演示:創(chuàng)建索引
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列創(chuàng)建唯一索引。
② 為SCOTT.EMP表的SAL列創(chuàng)建索引。
③ 在查詢中可能經(jīng)常使用job的小寫作為條件的表達式,因此創(chuàng)建索引時,可以先對JOB列中的所有值轉(zhuǎn)換為小寫后創(chuàng)建索引,而這時需要使用lower函數(shù),這種索引稱為基于函數(shù)的索引。
在select語句查詢時,Oracle系統(tǒng)會自動為查詢條件上的列應(yīng)用索引。索引就是對某一列進行排序,因此在索引列上,重復(fù)值越少,索引的效果越明顯。
Oracle可以為一些列值重復(fù)非常多且值有限的列(比如性別列)上創(chuàng)建位圖索引。關(guān)于Oracle更多的索引類型(比如反向鍵索引等),請參考Oracle官方文檔。