|-转 mysql的left join和inner join的效率对比,以及如何优化
关于left join的概念,大家是都知道的(返回左边全部记录,右表不满足匹配条件的记录对应行返回null),那么单纯的对比逻辑运算量的话,inner join 是只需要返回两个表的交集部分,left join多返回了一部分左表没有返回的数据。
mysql的left join和inner join的效率对比,以及如何优化_内连接和左连接效率-CSDN博客
一、前言
最近在写代码的时候,遇到了需要多表连接的一个问题,初始sql类似于:
select * from a left join b on a.x = b.x left join c on c.y = b.y left join d on d.z=c.z
- 1
这样的多个left join组合,一方面是心里有点不舒服,总觉得这种写法是有问题的,一方面有有点好奇,直接用inner join会怎样呢?差别在哪里?后续使用inner join发现速度要比left join快一些,所以这边就研究一下这个问题。
二、left join为什么会比 inner join 慢
1、关于逻辑运算量
关于left join的概念,大家是都知道的(返回左边全部记录,右表不满足匹配条件的记录对应行返回null),那么单纯的对比逻辑运算量的话,inner join 是只需要返回两个表的交集部分,left join多返回了一部分左表没有返回的数据。
2、关于mysql连接的算法 Nest Loop Join(嵌套联接循环)
这个算法是mysql默认的连接算法,类似于我们php程序的三个嵌套循环:
(foreach a as v){ (foreach b as v1){ (foreach c as v2){ } } }
从算法上来看,根据mysql文档,inner join在连接的时候,mysql会自动选择较小的表来作为驱动表,从而达到减少循环次数的目的。我们在使用left join表的时候,默认是使用左表作为驱动表,那么此时左表的大小是我们来控制的,如果控制不当,左表比较大,那么自然循环次数也会变多,效率会下降。
根据这两方面的对比,left join明显被秒成渣,但是我们的实际业务却经常需要使用left join,一切还是要以实际业务为主,所以大家还是仁者见仁智者见智的选择吧。博主这里因为业务并不是很需要left join,所以果断选择使用inner join来连接表。...
浏览更多内容请先登录。
立即注册
分享的网址网站均收集自搜索引擎以及互联网,非查问网运营,查问网并没有提供其服务,请勿利用其做侵权以及违规行为。
更新于:2024-03-28 16:42:29
相关内容
mysql 中文全文索引模糊查询和like模糊查询的速度对比
Mysql问题整理
Yii2数据库报错-SQLSTATE[HY093]: Invalid parameter number: no para...
Mysql server has gone away 报错原因分析及解决办法
mysql 警告 could not be resolved: Name or service not known
Mysql用特殊字符设置密码遇到的问题
Mysql的函数substring使用注意事项
MySQL 5.7内存使用分析
mysql 命令整理
【mysql】主键、普通索引、唯一索引和全文索引的比较
没有接收到要导入的数据。可能是文件名没有提交,也可能是文件大小超出 PHP 限...
Mysql 报错'SQLSTATE[HY000] [1045] Access denied for user 'root'@'...
php连接mysql报错The server requested authentication method unknown to ...
Mysql登录提示ERROR 2003 (HY000): Can't connect to MySQL server o...
Mysql报错SQLSTATE[HY000]: General error: 1366 Incorrect string ...
全网最详尽的Centos和Windows系统 Mysql8 root忘记密码解决办法
mysql数据库操作 报错 #1030 - Got error 176 "Read page with wrong ...
Linux系统彻底卸载MySQL数据库
Linux下mysql5.7忘记root密码的解决方法
ERROR 1130 (HY000): Host '127.0.0.1' is not allowed to connect to...
mysql创建数据类型为JSON时,显示的longtext数据类型
mysql 修改编码utf8mb4依旧无法保存表情 Incorrect string value: '\x解决办法
MySQL 中 不等于 会过滤掉 Null 的问题
Mysql知识学习
MySQL 8.0 索引特性1-函数索引
MySQL字符串函数substring:字符串截取
Mysql的临时变量取值3例
mysql查找字符串出现位置
mysql 更改AUTO_INCREMENT 失败的解决办法
MYSQL 数据库导入导出命令
mysql如何判断不包含某个字符串
Mysql中不要用操作符和函数名等等来命名字段
ORM 实例教程
Mysql中的排序规则utf8_unicode_ci、utf8_general_ci的区别总结
MySQL 中 datetime 和 timestamp 的区别与选择
Invalid default value for ‘updated_at‘
设置MySQL的group_concat_max_len长度为最大值
MySQL中concat()、concat_ws()、group_concat()函数使用技巧与心得
mysql的left join和inner join的效率对比,以及如何优化
PHP strpos() 对比 mysql locate()
mysqli的基本使用
推荐内容