关于在where条件里引用自定义函数做筛选查询的问题!请各位大侠指教!

katt 2005-12-22 04:31:44
我有一条sql查询语句如下:

select myFUNCTION(ttab.userid),tab.* from ("+sql2+") tab where myFUNCTION(ttab.userid)>0

其中sql2为一些关联sql查询,问题是我如果去掉where myFUNCTION(ttab.userid)>0,这条sql执行很快,加上就奇慢,我单独运行myFUNCTION速度很快!而且如果去掉where条件,select里还有myFUNCTION可并不影响速度,不知为什么,把myFUNCTION放在where里就非常慢

还请各位高手指点!
我这里先谢谢了!
...全文
159 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobfang 2005-12-23
  • 打赏
  • 举报
回复
怀疑是因为没有索引,系统在执行所有的where条件时按照从右向左的顺序执行的,因此是先调用了myfunction。你试试只执行SQL2,将myfunction分别加在SQL2的where条件的第一个和最后一个,对比看看这两种写法的执行速度是否差异很大。
18687874 2005-12-23
  • 打赏
  • 举报
回复
帮顶,学习
katt 2005-12-23
  • 打赏
  • 举报
回复
我打错了!ttab就是tab
select myFUNCTION(.userid),tab.* from ("+sql2+") tab where myFUNCTION(tab.userid)>0
这个sql里涉及的表每张表数据都不超过2000条,所以没建索引速度也不应该这么慢呀?
boydgmx 2005-12-22
  • 打赏
  • 举报
回复
你的userid上是不是有索引?

如果你坚持这么用的话,就建一个基于函数的索引。
bobfang 2005-12-22
  • 打赏
  • 举报
回复
你这个语句没有写错吗?ttab是什么?
把语句加上强制使用rule看看速度怎样。
select /*+ rule */ myFUNCTION(ttab.userid),tab.* from ("+sql2+") tab where myFUNCTION(ttab.userid)>0

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧