MySQL高级知识(十六)——小表驱动大表
前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里。在查询的优化中永远小表驱动大表。
1.为什么要小表驱动大表呢
类似循环嵌套
for(int i=5;.......)
{
for(int j=1000;......)
{}
}
如果小的循环在外层,对于数据库连接来说就只连接5次,进行5000次操作,如果1000在外,则需要进行1000次数据库连接,从而浪费资源,增加消耗。这就是为什么要小表驱动大表。
2.数据准备
根据MySQL高级知识(十)——批量插入数据脚本中的相应步骤在tb_dept_bigdata表中插入100条数据,在tb_emp_bigdata表中插入5000条数据。
注:100个部门,5000个员工。tb_dept_bigdata(小表),tb_emp_bigdata(大表)。
3.案例演示
①当B表的数据集小于A表数据集时,用in优于exists。
select *from tb_emp_bigdata A where A.deptno in (select B.deptno from tb_dept_bigdata B)
B表为tb_dept_bigdata:100条数据,A表tb_emp_bigdata:5000条数据。
用in的查询时间为:
将上面sql转换成exists:
select *from tb_emp_bigdata A where exists(select 1 from tb_dept_bigdata B where B.deptno=A.deptno);
用exists的查询时间:
经对比可看到,在B表数据集小于A表的时候,用in要优于exists,当前的数据集并不大,所以查询时间相差并不多。
②当A表的数据集小于B表的数据集时,用exists优于in。
select *from tb_dept_bigdata A where A.deptno in(select B.deptno from tb_emp_bigdata B);
用in的查询时间为:
将上面sql转换成exists:
select *from tb_dept_bigdata A where exists(select 1 from tb_emp_bigdata B where B.deptno=A.deptno);
用exists的查询时间:
由于数据量并不是很大,因此对比并不是难么的强烈。
附上视频的结论截图:
4.总结
下面结论都是针对in或exists的。
in后面跟的是小表,exists后面跟的是大表。
简记:in小,exists大。
对于exists
select .....from table where exists(subquery);
可以理解为:将主查询的数据放入子查询中做条件验证,根据验证结果(true或false)来决定主查询的数据是否得以保留。
by Shawn Chen,2018.6.30日,下午。
相关内容
最新文章
- 【WPF】FillRule
- Directory类
- Django filter中用contains 在mysql中的问题
- POJ2239 二分图最大匹配
- VS调试时监视上一个错误代码和错误的文本描述
- javascript模式——Factory
- MD5加密以及验证加密-加盐
- 配置snort
- Cypher查询语言--Neo4j 综合(四)
- ASP.NET Core Web API下事件驱动型架构的实现(四):CQRS架构中聚合与聚合根的实现
- linux下svn(subversion)服务端添加工程及配置权限
- Nuget 多平台多目标快速自动打包
- TCP/IP 笔记 - Internet协议
- Mac如何找到从AppStore下载的正版Xcode安装包、以及Xcode清理缓存
- cxf怎样提高webservice性能,及访问速度调优
- 利用docker hub做中转拉取google的k8s镜像
- POJ1222(SummerTrainingDay01-E)
- java.io.Serializable的作用
- J2EE开发推荐工具
- 移动端遇到的常见JS与CSS问题及解决方法
热门文章
- Tesseract 引擎翻译
- java_自定义标签,我的第一个自定义标签!
- 记录ThreadPoolTaskExecutor线程池的在项目中的实际应用,讲解一下线程池的配置和参数理解。
- The JRE_HOME environment variable is not defined correctly This environment
- confidence interval
- 虚拟机与Docker有何不同?
- HTTP与HTTPs的区别?
- 【 js 工具 】如何在Github Pages搭建自己写的页面?
- gulp简介
- angular 1.2.29版本下 动态添加多个表单、 校验全部、 提交 、ng-form方案