Oracle對象教程:索引(Index)創(chuàng)建使用,索引:對數(shù)據(jù)庫表中的某些列進(jìn)行排序,便于提高查詢效率。
當(dāng)我們在某本書中查找特定的章節(jié)內(nèi)容時(shí)诗茎,可以先從書的目錄著手,找到該章節(jié)所在的頁碼献汗,然后快速的定位到該頁敢订。這種做法的前提是頁面編號是有序的。如果頁碼無序罢吃,就只能從第一頁開始楚午,一頁頁的查找了。
數(shù)據(jù)庫中索引(Index)的概念與目錄的概念非常類似刃麸。如果某列出現(xiàn)在查詢的條件中醒叁,而該列的數(shù)據(jù)是無序的,查詢時(shí)只能從第一行開始一行一行的匹配。創(chuàng)建索引就是對某些特定列中的數(shù)據(jù)排序把沼,生成獨(dú)立的索引表啊易。在某列上創(chuàng)建索引后,如果該列出現(xiàn)在查詢條件中饮睬,Oracle會(huì)自動(dòng)的引用該索引租谈,先從索引表中查詢出符合條件記錄的ROWID,由于ROWID是記錄的物理地址捆愁,因此可以根據(jù)ROWID快速的定位到具體的記錄割去,表中的數(shù)據(jù)非常多時(shí),引用索引帶來的查詢效率非持绯螅可觀呻逆。
·如果表中的某些字段經(jīng)常被查詢并作為查詢的條件出現(xiàn)時(shí),就應(yīng)該考慮為該列創(chuàng)建索引菩帝。
·當(dāng)從很多行的表中查詢少數(shù)行時(shí)咖城,也要考慮創(chuàng)建索引。有一條基本的準(zhǔn)則是:當(dāng)任何單個(gè)查詢要檢索的行少于或者等于整個(gè)表行數(shù)的10%時(shí)呼奢,索引就非常有用宜雀。
Oracle數(shù)據(jù)庫會(huì)為表的主鍵和包含唯一約束的列自動(dòng)創(chuàng)建索引。索引可以提高查詢的效率握础,但是在數(shù)據(jù)增刪改時(shí)需要更新索引辐董,因此索引對增刪改時(shí)會(huì)有負(fù)面影響。
語法結(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:指定要為哪個(gè)表創(chuàng)建索引定枷。
4. column_name:指定要對哪個(gè)列創(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的小寫作為條件的表達(dá)式絮供,因此創(chuàng)建索引時(shí)衣吠,可以先對JOB列中的所有值轉(zhuǎn)換為小寫后創(chuàng)建索引,而這時(shí)需要使用lower函數(shù)壤靶,這種索引稱為基于函數(shù)的索引缚俏。
在select語句查詢時(shí),Oracle系統(tǒng)會(huì)自動(dòng)為查詢條件上的列應(yīng)用索引。索引就是對某一列進(jìn)行排序忧换,因此在索引列上恬惯,重復(fù)值越少,索引的效果越明顯亚茬。
Oracle可以為一些列值重復(fù)非常多且值有限的列(比如性別列)上創(chuàng)建位圖索引酪耳。關(guān)于Oracle更多的索引類型(比如反向鍵索引等),請參考Oracle官方文檔刹缝。