解决方案 »

  1.   

    1、如果能合并成一句,执行效率会更高;一个不一定很吻合的例子,你把in()里面的东西拆分成N条SQL再Union All,显然性能低下。
    2、可能存在重复行,也就是多条SQL查出来相同行,Union All 是不去重的;这种情况在SQL复杂的时候往往难以彻底杜绝,可能会导致后续使用上出问题;
    3、如果不要All关键字,则结果集会被排序,多数据集排序也会损耗性能。就你的例子来说,我认为拼装为单SQL多参数,应该比多SQL性能更高;不过也要看Oracle的版本,因为不同版本解析器所生成的最终执行计划效率差距蛮大的。另外,两个条件字段是否有设置复合索引也是关键要素。总的来说,你最好做做性能测试,而不是纸上谈兵的这么说。
      

  2.   

    谢谢你的建议,你说的很有道理。我有地方不太明白,如果拼单sql的话,那就相当于在where后面进行循环,用where  dept_flag='"+sobids[i]+"' and post='"+posts[i] or (dept_flag='"+sobids[i+1]+"' and post='"+posts[i+1]  ) 是这样的形式吧?因为sobids和posts要一一对应,如果笼统的用两个in查出来的数据就有问题了吧?
      

  3.   

    是,要用 or 和 and 拼装,但对于数据库来说只是一句SQL。有索引情况下,就是N次索引定位查询。