1.in后条件不多,可以考虑主表建索引,或用unionall代替
2.in和exists的区别:如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in,反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了,另外IN时不对NULL进行处理。
3.如果in后接几百几千或几万的条件,可把in里的条件录入临时表,给临时表加索引,用表连接代替。
调用存储过程是java 把组合起来的字符串传到数据库后台 *** 作,如果你in ( pkStagesPersonArray),传到数据库后台还是 in ( pkStagesPersonArray) 而非你想要的 in('1330251','1336140' )所以你应该把pkStagesPersonArray 里面的内容转换成 '1330251','1336140' 再拼接起来在service中把参数放到HashMap中List<String>list = new ArrayList<String>()
list.add("x")
list.add("y")
list.add("z")
String s = "A"
Date d = new Date()
HashMap<String,Object>param = new HashMap<String,Object>()
param.put("list",list)
param.put("s",s)
param.put("d",d)
XXXDao.queryXXX(param)
在Mybatis的Mapper中是这么写:
<select id = "queryXXX",resultType = "XXX", paramterType = "java.lang.HashMap">
select * from tab where zi_duan1 = #{s} and zi_duan2 = #{d}
and zi_duan3 in
<foreach item="item" index="index" collection="list" open="("
separator="," close=")">
#{item}
</foreach>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)