查詢方式:LIKE '%xx%'
普通: SELECT * FROM TABLE T WHERE T.COLUNM LIKE '%xx%'
優化:使用 INSTR
SELECT * FROM TABLE T WHERE INSTR(T.COLUNM, xx)>0
在執行的時候,執行計劃顯示,消耗值,io值,cpu值均非常大,原因是like後面前模糊查詢導致索引失效,進行全表掃描。
1. 盡量不要使用 like '%%'
2. 對於 like '%' (不以 % 開頭),Oracle 可以應用 colunm上的index
3. 對於 like '%…' 的 (不以 % 結尾),可以利用reverse + function index 的形式,變化成 like '%'
4. 非用like'%%'不可時,使用Oracle內部函數:INSTR()解決。
附錄:
instr(string1 , string2[,start_position[,nth_appearence]])
string1:要在此字符串中查找。
string2:要在string1中查找的字符串。
start_position:從string1開始查找的位置。可選,默認為1,正數時,從左到右檢索,負數時,從右到左檢索。
nth_appearence:查找第幾次出現string2。可選,默認為1,不能為負。
注:如果沒有查找到,返回0。
故,上述例子中,
INSTR(T.COLUNM, 'xx')>0,是LIKE;INSTR(T.COLUNM, 'xx')=0,則是NOT LIKE。