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