in多值优化
〇、问题
今天ocp群里有人问
SELECT *
FROM table
WHERE id IN(11,2,3,44,...)
在in里面有大量数据4000+,有什么 好的处理方式吗?
我的优化方案的总体思路是把in转换成表连接,其中in中多值转换成一列的结果集,类似临时表功能
仅仅以MySQL和Java举例,其他数据库和开发语言也有类似的实现
1、目标
总体来说大概就是弄出来sql要这样
SELECT a.*
FROM table a
INNER JOIN (
SELECT 11 id
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 44
#其他的省略
) t ON a.id = t.id
2、代码
mybatis代码为
INNER JOIN (
<foreach collection="list" item="item" index="index" separator="UNION ALL" >
SELECT #{item} id
</foreach>
)t ON a.id = t.id
入参为parameterType="java.util.List"
这样就可以把in转换成mysql的表连接。
3、参数分裂
如果有sql过长的错误。就减少一次传入的list中id个数。
例如1000个一组查一次。然后在java中合并list
方法是java.util.List的boolean addAll(Collection<? extends E> c);
其他类似多参数in行构造器查询时。也可以使用类似方法优化。该方法可以使用到in的关系键是多列的情况

in多值优化的更多相关文章
- 返回值优化(RVO)
C++的函数中,如果返回值是一个对象,那么理论上它不可避免的会调用对象的构造函数和析构函数,从而导致一定的效率损耗.如下函数所示: A test() { A a; return a; } 在test函 ...
- 【M20】协助完成“返回值优化(RVO)”
1.方法返回对象,会导致临时对象的产生,这降低了效率,const Rational operator* (const Rational& lhs,Rational& rhs).有没有什 ...
- [转] C++中临时对象及返回值优化
http://www.cnblogs.com/xkfz007/articles/2506022.html 什么是临时对象? C++真正的临时对象是不可见的匿名对象,不会出现在你的源码中,但是程序在运行 ...
- [More Effective C++]条款22有关返回值优化的验证结果
(这里的验证结果是针对返回值优化的,其实和条款22本身所说的,考虑以操作符复合形式(op=)取代其独身形式(op),关系不大.书生注) 在[More Effective C++]条款22的最后,在返回 ...
- C++返回值优化RVO
返回值优化,是一种属于编译器的技术,它通过转换源代码和对象的创建来加快源代码的执行速度.RVO = return value optimization. 测试平台:STM32F103VG + Keil ...
- 转:C++中临时对象及返回值优化
http://www.cnblogs.com/xkfz007/articles/2506022.html 什么是临时对象? C++真正的临时对象是不可见的匿名对象,不会出现在你的源码中,但是程序在运行 ...
- C++返回值优化
返回值优化(Return Value Optimization,简称RVO)是一种编译器优化机制:当函数需要返回一个对象的时候,如果自己创建一个临时对象用于返回,那么这个临时对象会消耗一个构造函数(C ...
- 一段小代码秒懂C++右值引用和RVO(返回值优化)的误区
关于C++右值引用的参考文档里面有明确提到,右值引用可以延长临时变量的周期.如: std::string&& r3 = s1 + s1; // okay: rvalue referen ...
- kmeans 聚类 k 值优化
kmeans 中k值一直是个令人头疼的问题,这里提出几种优化策略. 手肘法 核心思想 1. 肉眼评价聚类好坏是看每类样本是否紧凑,称之为聚合程度: 2. 类别数越大,样本划分越精细,聚合程度越高,当类 ...
随机推荐
- MQC集群配置错误
这个错误说明配置里面,MQC环境配置错了 运行war包时会读到本地的配置system-config.propertites文件
- run as --> Maven clean 可以清除旧的jar包
run as --> Maven clean 可以清除旧的jar包
- 【期外】(二)还是N皇后动画演示
题目:n皇后题目 题解:n皇后题解 演示:
- C#分布式登录——jwt
一.传统的session登录 在服务器存储一份用户登录的信息,这份登录信息会在响应时传递给浏览器,告诉其保存为cookie,以便下次请求时发送给我们的应用,这样我们的应用就能识别请求来自哪个用户了,这 ...
- 【转载】PyChram简单使用教程
原文链接:https://www.cnblogs.com/yamei/p/5519818.html 一.PyChram下载官网:http://www.jetbrains.com/pycharm Win ...
- Oracle和Mysql分页的区别
一.Mysql使用limit分页 select * from stu limit m, n; //m = (startPage-1)*pageSize,n = pageSize PS: (1)第一个参 ...
- Java 中几种常用设计模式
Java 中一般认为有23种设计模式,当然暂时不需要所有的都会,但是其中常见的几种设计模式应该去掌握. 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模 ...
- Flink的应用场景和架构
Flink的应用场景 Flink项目的理念就是:Flink是为分布式,高性能,随时可用以及准确的流处理应用程序打造的开源流处理框架.自2019年开源以来,迅速成为大数据实时计算领域炙手可热的技术框架. ...
- Kubernetes 多集群在开源项目 KubeSphere 的应用
Kubernetes 多集群使用场景 随着容器的普及和 Kubernetes 的日渐成熟,企业内部运行多个 Kubernetes 集群已变得颇为常见.概括起来,多个集群的使用场景主要有以下几种. 多集 ...
- mr原理简单分析
背景 又是一个周末一天一天的过的好快,今天的任务干啥呢,索引总结一些mr吧,因为前两天有面试问过我?我当时也是简单说了一下,毕竟现在写mr程序的应该很少很少了,废话不说了,结合官网和自己理解写起. 官 ...