使用MyBatis in查询(单次查询)和for循环查询(多次查询) 的效率问题

两种查询如下

  • in查询
    List<Person> personList 
    		= this.list(Wrappers.<Person>lambdaQuery().in(Person::getId, ids));
    
  • for查询
    for(String id : ids){
    	Person = this.selectById(id);
    }
    

很多人都会思考这两者的效率问题,但可能没什么头绪

首先大家应该是看到:“in查询效率低” 这种说法,就认为所有的in查询效率都低,一旦使用到in时就会有所疑虑。实际上这种说法说的是in中嵌套子查询语句的情况,确实有这么一回事,但本文不做讨论,因为实际的开发中"关联表查询影响效率的问题"是可以在设计上避免的,而且也应该在设计上避免。

那么就只对上述代码例子中的情况进行分析,in语句中不包含子查询,而是确切的一些值。在这种情况下,要分析的效率问题是:网络传输

  • for查询:需要循环交互数据库,即便有连接池复用(连接池会复用connection,避免多次创建和关闭connection造成时间浪费),但每次的网络传输还是会拖慢总体的速度 (做过代码执行效率分析的都知道,程序本身的运行其实并不会消耗多少时间,反而是网络传输消耗的时间较多)
  • in查询:相比for查询,in查询将多次交互直接降为一次,只进行一次网络传输,节省了网络传输的时间。


版权声明:本文为qq_43413788原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。