Oracle中用instr函數替代like操作


一個600萬條記錄的表TabA,需要執行一個含有like的語句:

select count(*) from TabA where FieldB like 'R01%';

原始情況下,大約需要1分鍾時間。檢查執行計划,是走全表掃描。

因為like是從頭部開始,將FieldB加上索引,執行計划顯示利用了索引,實際運行時間降到5秒多。

此時,有人建議改用instr函數代替,語句為:

select count(*) from TabA where instr(FieldB, 'R01%')=1;

講真,一開始本人是不相信的,因為執行計划顯示沒有利用索引,又走了全表掃描。但實際結果卻是:用時只有1秒左右,大大出乎意料。

網上搜索,才發現早有很多的類似案例,而且在替代like 'xxx%'、like '%xxx%'、not like...等情況時都能提升效率。

看來確實是我孤陋寡聞,也說明只看執行計划並不可靠。

 

PS:經實踐檢測,又發現此經驗並非在任何環境都靈驗,有些環境下依然是like 'xxx%'(用索引)的效率更高。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM