使用Oracle函數(shù)索引 提高查詢效率
使用Oracle函數(shù)索引,無疑是提高查詢效率的有效方法之一。下面就為您詳細(xì)介紹Oracle函數(shù)索引的使用方法,希望對(duì)您能有所幫助。
談到任何對(duì)列的操作都可能導(dǎo)致全表掃描,例如:
- select * from emp where substr(ename,1,2)=’SM’;
但是這種查詢?cè)诳头到y(tǒng)又經(jīng)常使用,我們可以創(chuàng)建一個(gè)帶有substr函數(shù)的基于Oracle函數(shù)索引,
- create index emp_ename_substr on eemp ( substr(ename,1,2) );
但是這種查詢?cè)诳头到y(tǒng)又經(jīng)常使用,我們可以創(chuàng)建一個(gè)帶有substr函數(shù)的Oracle函數(shù)索引,
- create index emp_ename_substr on eemp ( substr(ename,1,2) );
這樣在執(zhí)行上面的查詢語句時(shí),這個(gè)基于函數(shù)的索引將排上用場(chǎng),執(zhí)行計(jì)劃將是(INDEX RANGE SCAN)。
上面的例子中,我們創(chuàng)建了基于函數(shù)的索引,但是如果執(zhí)行下面的查詢:
- select * from emp where substr(ename,1,1)=’S’
得到的執(zhí)行計(jì)劃將還是(TABLE ACCESS FULL),因?yàn)橹挥挟?dāng)數(shù)據(jù)列能夠等式匹配時(shí),基于函數(shù)的索引才能生效,這樣對(duì)于這種索引的計(jì)劃和維護(hù)的要求都很高。請(qǐng)注意,向表中添加索引是非常危險(xiǎn)的操作,因?yàn)檫@將導(dǎo)致許多查詢執(zhí)行計(jì)劃的變更。然而,如果我們使用基于函數(shù)的索引就不會(huì)產(chǎn)生這樣的問題,因?yàn)镺racle只有在查詢使用了匹配的內(nèi)置函數(shù)時(shí)才會(huì)使用這種類型的索引。
【編輯推薦】
oracle函數(shù)返回表的實(shí)現(xiàn)