查询方式: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。