美文网首页
Mysql高级(七) 小表驱动大表

Mysql高级(七) 小表驱动大表

作者: 卡戎li | 来源:发表于2020-05-04 18:31 被阅读0次

一、小表驱动大表的含义

类似循环嵌套
for(int i=5;.......)
{
for(int j=1000;......)
{}
}

如果小的循环在外层,对于数据库连接来说就只连接5次,进行5000次操作,如果1000在外,则需要进行1000次数据库连接,从而浪费资源,增加消耗。这就是为什么要小表驱动大表。

二、in 和exists 性能对比

  • 当B表的数据集小于A表数据集时,用in优于exists。

select *from tb_emp_bigdata A where A.deptno in (select B.deptno from tb_dept_bigdata B)

  • 当A表的数据集小于B表的数据集时,用exists优于in。

select *from tb_dept_bigdata A where A.deptno in(select B.deptno from tb_emp_bigdata B);

图片.png
  • 原理
select * from A where id in (select id from B)
等价于
for select id from B
for select * from A where A.id = B.id

当B表的数据集必须小于A表的数据集时,用in 优于exists.

select * from A where exists  (select 1 from B where B.id = A.id)
等价于
for select * from A
for select * from B where A.id = B.id

当B表的数据集必须大于A表的数据集时,用exists优于in.

三、总结

in后面跟的是小表,exists后面跟的是大表。
简记:in小,exists大。

对于exists

select .....from table where exists(subquery);

可以理解为:将主查询的数据放入子查询中做条件验证,根据验证结果(true或false)来决定主查询的数据是否得以保留。

参考博客:https://www.cnblogs.com/developer_chan/p/9247185.html

相关文章

  • mysql 查询优化

    Mysql优化之高级 一、exists和in - - - 小表驱动大表 前言: 50010000和10000500...

  • Mysql高级(七) 小表驱动大表

    一、小表驱动大表的含义 类似循环嵌套for(int i=5;.......){for(int j=1000;......

  • MySQL 优化

    MySQL 优化 表关联查询时务必遵循小表驱动大表原则; 使用查询语句where条件时,不允许出现函数,否则索引会...

  • MySQL 优化点

    MySQL 优化 表关联查询时务必遵循小表驱动大表原则; 使用查询语句where条件时,不允许出现函数,否则索引会...

  • 大表驱动小表

    定制下测试数据 department表部门表1w条,为小表,employee100w条记录,大表 建立了索引,可以...

  • 2021-08-09 MySQL性能优化总结

    MySQL性能优化层面 SQL和索引层面优化 Explain 小结 嵌套查询一般是从外到内进行;小表驱动大表 --...

  • 咬文嚼字之驱动表&outer表

    什么是驱动表?什么是 outer 表和 inner 表?outer 表等同于驱动表吗? 在MySQL中这个问题的脉...

  • 好程序员大数据学习路线之hive表的查询

    好程序员大数据学习路线分享hive表的查询 1.join 查询 1、永远是小结果集驱动大结果集(小表驱动大表,小表...

  • MySQL优化

    MySQL语句优化原则 1. 小表驱动大表(针对查询),可以减少IO 2. 最左前缀法则(针对索引),索引了多列的...

  • 13.MySQL联表查询中的驱动表,优化查询,以小表驱动大表

    一、为什么要用小表驱动大表 1、驱动表的定义 当进行多表连接查询时, [驱动表] 的定义为: 1)指定了联接条件时...

网友评论

      本文标题:Mysql高级(七) 小表驱动大表

      本文链接:https://www.haomeiwen.com/subject/elvyghtx.html