oracle sql 查询我使用自已写的函数查询很快,加了函数做条件就很慢是为什么?

如:selecta,b,test(a)cfromdemo;--只这样查很快selecta,b,test(a)cfromdemowheretest(a)like'%123%... 如:select a,b, test(a) c from demo; --只这样查很快
select a,b,test(a)c from demo where test(a) like '%123%'; --这样就很慢
记录只有几十万条记录左右
展开
 我来答
匿名用户
推荐于2018-04-11
展开全部
慢是因为
对于 几十万条记录左右,
你那个 test(a) 函数, 需要执行 很多次, 每行执行一次, 然后判断 LIKE '%123%'

至于:
select a,b, test(a) c from demo; --只这样查很快

我估计你使用的是 PLSQL Developer。
查询的时候, 默认是查询第一页, 因此很快。
因为只显示少部分行。
例如一页20行的话, 那么也就执行你那个函数 20次。
yyyu728
2013-05-24 · TA获得超过228个赞
知道小有建树答主
回答量:237
采纳率:50%
帮助的人:96.7万
展开全部
因为要遍历比对是否like123啊,前一个sql只是取列数据,直接把相应列读出来就行了。几十万的记录难道还少吗?你可以把sql①语句的结果做个视图,然后在这视图上再做sql②语句,试试是不是快点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
射手幽灵伊
2013-05-24 · TA获得超过2716个赞
知道大有可为答主
回答量:4955
采纳率:81%
帮助的人:1998万
展开全部
加了条件后,不仅要对 test(a) 进行处理 还对 test(a) 进行 遍历 比对 '%123%' 所以肯定会慢的了。
可以想其他办法处理。
比如 test 结果就直接为123的条件
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
arestoruk
2013-05-24 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:160
采纳率:100%
帮助的人:67.8万
展开全部
如上回答中,都有几种方法了,
你的查询可以建立函数索引, CREATE INDEX FIDX_AAA ON DEMO(test(A));
另查询条件如果想用到索引,like条件须写为 like '123%'. 写法'%xxx‘是不会走索引的,即使加了Hint也是full index,数据量多的话应该也不会快
追问
索引是有的,只是业务要求是要用like '%%'的
追答
你是指函数索引已经有了吗?加了函数索引如果还是使用like '%%'这样写法也用不到,加了hint也是full index扫描,速度可能会有改善,但不是最理想,

数据库结构,数据存取和应用段的设计应该是要结合的.你可以在应用段把数据存取做部分限制,或在结构设计上作写改变. 几乎没有银行让我们可以一次查10年来的所有的消费记录. 应用段也是可以改的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yuanzai32
2013-05-24 · TA获得超过114个赞
知道小有建树答主
回答量:165
采纳率:0%
帮助的人:119万
展开全部
like模糊查询的时候 如果是c%会走索引 是%c%或者%c都不会走索引
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式