111升学论坛

 找回密码
 加入家园
专业、学校怎么选?免费公益咨询解答开通学校版块微信:543646没考上高中怎么办,不要慌!
热门:大连报关学校招生网增加印象分,实用新型专利包过申请发明专利申请并不难,代写全部材料,轻松申请!
查看: 123|回复: 14

在查询的优化中为什么要永远小表驱动大表?

[复制链接]

37

主题

76

回帖

366

积分

中级会员

Rank: 3Rank: 3

积分
366
发表于 2021-2-22 21:40:40 | 显示全部楼层 |阅读模式
集群智慧云科服发明专利申请
1.为什么要小表驱动大表呢

类似循环嵌套
for(int i=5;.......)
{
for(int j=1000;......)
{}
}如果小的循环在外层,对于数据库连接来说就只连接5次,进行5000次操作,如果1000在外,则需要进行1000次数据库连接,从而浪费资源,增加消耗。这就是为什么要小表驱动大表。
比如:我们在tb_dept_bigdata表中插入100条数据,在tb_emp_bigdata表中插入5000条数据。






注:100个部门,5000个员工。tb_dept_bigdata(小表),tb_emp_bigdata(大表)。
①当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的查询时间为:



经对比可看到,在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的查询时间:



由于数据量并不是很大,因此对比并不是难么的强烈。
附上结论截图:



.总结

下面结论都是针对in或exists的。
in后面跟的是小表,exists后面跟的是大表。
简记:in小,exists大。
对于exists
select .....from table where exists(subquery);
可以理解为:将主查询的数据放入子查询中做条件验证,根据验证结果(true或false)来决定主查询的数据是否得以保留。
回复

使用道具 举报

24

主题

53

回帖

265

积分

中级会员

Rank: 3Rank: 3

积分
265
发表于 2021-2-22 21:44:57 | 显示全部楼层
开头的连接五次,,,你从哪里资料得来的。
回复

使用道具 举报

47

主题

39

回帖

269

积分

中级会员

Rank: 3Rank: 3

积分
269
发表于 2021-2-22 21:49:14 | 显示全部楼层
这个没绝对,还是要看有没有索引的。如果大表没索引,小表有,肯定大表快
回复

使用道具 举报

21

主题

67

回帖

269

积分

中级会员

Rank: 3Rank: 3

积分
269
发表于 2021-2-22 21:53:31 | 显示全部楼层
转发了
回复

使用道具 举报

32

主题

56

回帖

253

积分

中级会员

Rank: 3Rank: 3

积分
253
发表于 2021-2-22 21:57:48 | 显示全部楼层
转发了
回复

使用道具 举报

32

主题

71

回帖

330

积分

中级会员

Rank: 3Rank: 3

积分
330
发表于 2021-2-22 22:02:05 | 显示全部楼层
转发了
回复

使用道具 举报

38

主题

39

回帖

245

积分

中级会员

Rank: 3Rank: 3

积分
245
发表于 2021-2-22 22:06:22 | 显示全部楼层
转发了
回复

使用道具 举报

9

主题

47

回帖

186

积分

新手上路

Rank: 1

积分
186
发表于 2021-2-22 22:10:39 | 显示全部楼层
转发了
回复

使用道具 举报

26

主题

31

回帖

205

积分

中级会员

Rank: 3Rank: 3

积分
205
发表于 2021-2-22 22:14:56 | 显示全部楼层
转发了
回复

使用道具 举报

25

主题

31

回帖

179

积分

新手上路

Rank: 1

积分
179
发表于 2021-2-22 22:19:13 | 显示全部楼层
转发了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入家园

本版积分规则

QQ|Archiver|手机版|小黑屋|111升学论坛

GMT+8, 2024-9-20 05:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表