MySQL之IN的优化

场景描述:

MySQL的IN的问题:由于in里面的内容过于庞大 (5000+),导致查询效率低下(4秒以上)。

SELECT * FROM xxx WHERE `id` IN(xxx)
计划解决方案:
1.测试得到IN里面的最佳数量
2.循环分多次查询
3.多线程共同执行
实际测试记录:

1.查询最佳数量

1次    4265ms、4177ms、4112ms		        平均4.18秒	 5643条
2次    1128ms、1105ms、1117ms			    平均2.23秒	 2822条
3次    326ms、298ms、326ms			        平均1.27秒	 1411条
8次    117ms、91ms、88ms、100ms、86ms         平均0.77秒    705条
20次   43 32 24 25 34 23 24 27 28 22	    平均0.56秒     282条
40次   25 16 11 10 13 10 10 10 13 10 	    平均0.51秒     141条
30次   29 18 17 13 14 15 15 17 15 17	    平均0.51秒     188条

结论:

20次和40次差距不大,又测试了30次的数据结果,结果和40次一样。
mysql查询次数对性能也有影响,所以我们以200条定为最佳数量值进行测试.

2.循环查询 (29次)

    Integer total = orderIds.size();
    Integer size = 200;
    Integer pages = total % size == 0 ? total / size : total / size + 1;
    List<Order> finalRes = new ArrayList<Order>
  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值