慢是因为
对于 几十万条记录左右,
你那个 test(a) 函数, 需要执行 很多次, 每行执行一次, 然后判断 LIKE '%123%'
至于:
select a,b, test(a) c from demo; --只这样查很快
我估计你使用的是 PLSQL Developer。
查询的时候, 默认是查询第一页, 因此很快。
因为只显示少部分行。
例如一页20行的话, 那么也就执行你那个函数 20次。
因为要遍历比对是否like123啊,前一个sql只是取列数据,直接把相应列读出来就行了。几十万的记录难道还少吗?你可以把sql①语句的结果做个视图,然后在这视图上再做sql②语句,试试是不是快点
加了条件后,不仅要对 test(a) 进行处理 还对 test(a) 进行 遍历 比对 '%123%' 所以肯定会慢的了。
可以想其他办法处理。
比如 test 结果就直接为123的条件
如上回答中,都有几种方法了,
你的查询可以建立函数索引, CREATE INDEX FIDX_AAA ON DEMO(test(A));
另查询条件如果想用到索引,like条件须写为 like '123%'. 写法'%xxx‘是不会走索引的,即使加了Hint也是full index,数据量多的话应该也不会快
like模糊查询的时候 如果是c%会走索引 是%c%或者%c都不会走索引