像 like 那种的模糊查询,数据库引擎将不使用索引数据。像 instr(colname,'中国') 这样子在列名上使用函数,除非你建的是 function-based index,否则也将不使用一般的索引。下面是创建 function-based index 的示例,示例 1 为Oracle online document 里的关于 function-based index 的示例,你可以参考。1. CREATE INDEX emp_i ON emp (UPPER(ename)); 创建了这个索引之后,执行如下语句的时候将使用索引数据: SELECT * FROM emp WHERE UPPER(ename) IS NOT NULL ORDER BY UPPER(ename);2. CREATE INDEX idx_colname ON TAB_NAME(instr(colname,'中国'))
clob就用select * from tbname where dbms_lob.instr(colname,'中国',1,1)>0 and dbms_lob.instr(colname,'北京',1,1)>0
创建了这个索引之后,执行如下语句的时候将使用索引数据:
SELECT * FROM emp WHERE UPPER(ename) IS NOT NULL
ORDER BY UPPER(ename);2. CREATE INDEX idx_colname ON TAB_NAME(instr(colname,'中国'))