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