sql语句中的<>和in

今天优化了一段项目中的代码。代码的作用就是在用户表和用户账户表中查出所有有账户的用户,当然查出来的用户应该是不重复的(distinct一下),这2个表中的记录大约都为2万条左右,数据量还是很大的,代码通过hibernate的转换出来是这样的:
select * from ( select rownumber() over() as rownumber_, row_.* from ( select distinct userpo1_.ID as col_0_0_ from
RUN08110.T_ACCUSR accountuse0_ inner join RUN08110.T_USRINFO userpo1_ on accountuse0_.USER_ID=userpo1_.ID where 1=1
and accountuse0_.CHK_FLAG<>0 and (userpo1_.IDENTITY in (4 , 5 , 6 , 7)) ) as row_ ) as temp_ where rownumber_ <= ?
很简单的一条语句,没有必要详细的解释。看起来任何问题都没有,运行时肯定不会报错,但查询速度非常非常慢,从后台取出数据到前台分页显示,如果计算机性能不太好,可能需要1分半钟的时间,问题困扰了我很长时间,我尝试着更换表之间的连接方式,但是效果很不明显,真是百思不得其解。后来和同事一起分析了一下,我把'<>'换成了'>',把 'in (4 , 5 ,6 , 7)'换成了'>3'(和以前的条件是等价的),重启服务器,再执行一遍查询,简直太不可思议了,查询速度非常非常快,优化成功!看来用sql查询时'<>'以及'in'不是随便用的,使用得不当可能会严重影响查询速度,要慎用!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值