Mysql之小表驱动大表

  • 1 什么是小表驱动大表
  • 2 为什么使用小表驱动大表
  • 3 判断驱动表与非驱动表
  • 4 Exists和in的使用场景

1 什么是小表驱动大表

用小的数据集去驱动(可理解为匹配)大的数据集

2 为什么使用小表驱动大表

表A有20条数据,表B有20万数据.外部执行一次连接,内部要执行多次.

​ 按照小表驱动大表,即A驱动B

for(20条){for(20万条){}
}

​ 大表驱动小表,即B驱动A

for(20万){for(20条){}
}
  • 小的循环在外层,表连接需要20次
  • 大的循环在外层,表连接需要20万次,浪费数据库资源

总结: 小表驱动大表的主要目的是通过减少表连接创建的次数,加快查询速度.

3 判断驱动表与非驱动表

  • 1 LEFT JOIN 左连接,左边为驱动表,右边为被驱动表.

  • 2 RIGHT JOIN 右连接,右边为驱动表,左边为被驱动表.

  • 3 INNER JOIN 内连接, mysql会选择数据量比较小的表作为驱动表,大表作为被驱动表.

  • 4 可通过EXPLANIN查看SQL语句的执行计划,EXPLANIN分析的第一行的表即是驱动表.

LEFT JOIN :左连接小表驱动大表

​ 1 左边是驱动表,右边是被驱动表

​ 2 小表驱动大表优于大表驱动小表

​ 3 驱动表索引没有生效,被驱动表索引有效

LEFT JOIN: 内连接,表1驱动表2

​ 1 数据库会自动选择数据量小的作为驱动表,大表作为被驱动表

​ 2 执行效率,和左连接执行效率相差不大

​ 3 驱动表索引没有生效,被驱动表索引有效

4 Exists和in的使用场景

SELECT * FROM A WHERE ID IN (SELECT ID FROM B)

当B表的数据较小时,IN 优于Exists.

SELECT * FROM A WHERE  EXISTS (SELECT 1 FROM B WHERE B.ID = A.ID)

当A表的数据集小于B表时,用Exists优于IN.

参考资料:

小表驱动大表

sql优化小表驱动大表

Mysql之小表驱动大表相关推荐

  1. MySQL IN、Exist关联查询时,我们为什么建议小表驱动大表?

    有的时候我们在操作数据库时会将两个或多个数据表关联起来通过一些条件筛选数据,在关联表时我们要遵循一些原则,这样会使我们编写的SQL 语句在效率上快很多. 一.优化原则 小表驱动大表,即小的数据集驱动大 ...

  2. Mysql优化原则_小表驱动大表IN和EXISTS的合理利用

    //假设一个for循环 for($i = 0; $i < 10000; $i++) { for ($j = 0; $i < 50; $j++){} }for($i = 0; $i < ...

  3. MySql小表驱动大表

    有的时候我们在操作数据库时会将两个或多个数据表关联起来通过一些条件筛选数据,在关联表时我们要遵循一些原则,这样会使我们编写的SQL 语句在效率上快很多. 一.优化原则 小表驱动大表,即小的数据集驱动大 ...

  4. mysql算法优化原则_Mysql优化原则_小表驱动大表IN和EXISTS的合理利用

    //假设一个for循环 for($i = 0; $i < 10000; $i++) { for ($j = 0; $i < 50; $j++) { } } for($i = 0; $i & ...

  5. MySQL关联查询时,我们为什么建议小表驱动大表?

    作者:留兰香丶 blog.csdn.net/codejas/article/details/78632883 有的时候我们在操作数据库时会将两个或多个数据表关联起来通过一些条件筛选数据,在关联表时我们 ...

  6. MySQL高级知识(十六)——小表驱动大表

    前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里.在查询的优化中永远小表驱动大表. 1.为什么要小表驱动大表呢 类似循环嵌套 for(int i=5 ...

  7. mysql 大表 驱动_MySql 小表驱动大表

    在了解之前要先了解对应语法 in 与 exist. in后的括号的表达式结果要求之输出一列字段.与之前的搜索字段匹配,匹配到相同则返回对应行. mysql的执行顺序是先执行子查询,然后执行主查询,用子 ...

  8. mysql 小表连大表_MySQL 表之间关联查询时,为什么建议小表驱动大表?

    有的时候我们在操作数据库时会将两个或多个数据表关联起来通过一些条件筛选数据,在关联表时我们要遵循一些原则,这样会使我们编写的SQL 语句在效率上快很多. 一.优化原则 小表驱动大表,即小的数据集驱动大 ...

  9. 【MySQL】小表驱动大表

    1.概述 前言:本来小表驱动大表的知识应该在前面就讲解的,但是由于之前并没有学习数据批量插入,因此将其放在这里.在查询的优化中永远小表驱动大表. 1.为什么要小表驱动大表呢 类似循环嵌套 for(in ...

最新文章

  1. 拥抱高效、拥抱 Bugtags 之来自用户的声音(三)
  2. 性能SOTA、适用多种类型物体,国防科技大学单张RGB-D图像预测物体对称性
  3. golang sync.Mutex 互斥锁 使用实例
  4. CxImage的使用及基本用法
  5. 当遇到用\来分隔字符串
  6. PyCharm使用期间出现报错集合 持续更新ing
  7. Generate a Simulator Build command
  8. 利用UICollectionView实现瀑布流
  9. jQuery:级联查询-省份城市信息
  10. 分享几款强大的录音软件,厉害炸了!
  11. 锐捷交换机配置snmp版本_锐捷交换机如何配置接口IP地址
  12. POJ 3692 Kindergarten(最大团)
  13. 在c语言中如何区别%s和%c
  14. 字符串前面加f是什么意思?
  15. 不用找,你想要的节日 节庆 节气展板展架模板素材都在这里
  16. 绝了!多个激光雷达和相机的快速且鲁棒的外参标定方法(代码开源)
  17. 人工智能时代特征初步显现,主要体现在哪几个方面?
  18. 微型计算机是计算器吗,计算器和计算机的区别?
  19. 远程校准频率标准与数字时钟的解决方案
  20. 不用修改注册表和组策略也能在 Win11 报名教师资格证

热门文章

  1. 沙漠玫瑰最美眼妆教程
  2. 高清通话蓝牙耳机推荐,打电话专用的耳机分享
  3. udp和tcp切换之坑
  4. 分享iOS社区app创业经历
  5. 【软件设计】深入理解日志系统的意义
  6. bootstrap插件icheck
  7. apache wordpress php 外贸独立站
  8. 以太坊核心研究员Hsiao-Wei Wang:关于以太坊2.0的答疑解惑!
  9. SHA256withRSA签名,RSA加解密
  10. 2020年10月21日,滴滴还在用大数据杀熟吗