Mybatis 调用oracle 效率问题

aiyahai118 2013-12-20 12:50:47
写了一个function qx(uid,pid)
在某个查询语句中这样写select * from customer where delflag=1 and 1=qx(#{id});
这样会查询很慢。

create or replace function qx(uId varchar2){
return varchar2 is
hasXq varchar2(20) :='0';
adminCount number:=0;
begin
--是否是管理员
select count(*) into adminCount from user_role where user_id=uId and role_id=1;
if adminCount>0 then
hasXq:='1';
else
hasXq:='0';
end if;
return hasXq;
end;
}

若果不用函数直接这样写select * from customer where delflag=1 and 1=( select count(*)from user_role where user_id=uId and role_id=1)就很快


若果还是想用function该怎么改,才能优化查询效率
...全文
425 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
aiyahai118 2013-12-20
  • 打赏
  • 举报
回复
引用 4 楼 Inhibitory 的回复:
这个是SQL语句的问题了,不是MyBatis的问题。 所以需要你去优化SQL
这个function的作用很简单,就只是查询当前用户是不是管理员,就一句sql. 相当于在select * from customer后面加了一个where条件。。。 还能咋优化??? 我把函数里的sql考到mybaties里就很快了。。
aiyahai118 2013-12-20
  • 打赏
  • 举报
回复
引用 3 楼 fangmingshijie 的回复:
为什么不用存储过程呢?为什么不建索引呢
这个function的作用很简单,就只是查询当前用户是不是管理员,就一句sql. 相当于在select * from customer后面加了一个where条件 若果用存储过程,应该咋写?才能实现相同的功能?
tony4geek 2013-12-20
  • 打赏
  • 举报
回复
sql 执行计划看看。
Inhibitory 2013-12-20
  • 打赏
  • 举报
回复
这个是SQL语句的问题了,不是MyBatis的问题。 所以需要你去优化SQL
  • 打赏
  • 举报
回复
为什么不用存储过程呢?为什么不建索引呢
Defonds 2013-12-20
  • 打赏
  • 举报
回复
你以后要换其他数据库就哭吧
长笛党希望 2013-12-20
  • 打赏
  • 举报
回复
能不用function 还是别用function 吧,,,非要用function 就在业务代码里做处理吧。。。

81,091

社区成员

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

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