你了解MySQL中的多表联合查询吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了你了解MySQL中的多表联合查询吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3328字,纯文字阅读大概需要5分钟。
内容图文
![你了解MySQL中的多表联合查询吗?](/upload/InfoBanner/zyjiaocheng/516/0e113751e6714f93831eb1a3e9f94543.jpg)
select * from t1 straight_join t2 on (t1.a =t2.a);我们通过explain来看一下这条语句的执行结果。
![你了解MySQL中的多表联合查询吗? - 文章图片](/upload/getfiles/0001/2021/4/25/20210425100538670.jpg)
- 从表t1中读取一行数据R
- 从数据行R中,取出a字段到表t2里去查找
- 取出表t2中满足条件的行,跟R组成一行,作为结果集的一部分
- 重复执行步骤1到3,直到表t1的末尾循环结束。
如果不使用join会怎样呢?
如果不使用join,那么我们需要将t1的数据全部取出,然后取出a的值,记为$R.a在执行select * from t2 where a= $R.a,再讲结果和R构成结果集的一行。 这样做虽然也是扫描了100行数据,但是总共执行了101条语句,与MySQL服务器多了100次交互,而且还需要自己去构建结果集。这么做显然没有直接join要好。Simple-Nested-Loop join
在上述SQL执行的过程中,驱动表走的是全表扫描,被驱动表走的是数搜索,所以整个过程的时间复杂度可以近似表示为:O(n*log2m),所以我们应该尽量使用小表来做驱动表 当n扩大1000倍的时候,时间复杂度扩大1000倍,m扩大1000倍的时候,这个数值只扩大10不到10倍。 结论:- 使用join语句,性能比强拆成多个单表执行SQL语句的性能要好
- 如果使用join语句的话,需要让小表做驱动表
Block Nested-Loop Join:
这个时候,按照我们上面的分析,会不会取笛卡尔积,扫描100*1000次呢?我们可以使用explain来查看一下下面的SQL执行结果:select * from t1 straight_join t2 on (t1.a=t2.b);
![你了解MySQL中的多表联合查询吗? - 文章图片](/upload/getfiles/0001/2021/4/25/20210425100538857.jpg)
- 把表t1的数据读入到线程内存join_buffer中,由于我们这个语句中写的是select * 因此会讲整个表t1放入内存。
- 扫描表t2,把t2中的每一行数据取出来,跟join_buffer中的数据做对比,满足join条件的,作为结果集的一部分返回。
结论:
如果可以使用被驱动表的索引,join语句非常有优势 不能使用被驱动表的索引,只能使用Block Nested-Loop Join算法,尽量不要使用 在使用join的时候,应选择小表作为驱动表你了解MySQL中的多表联合查询吗?
标签:rtm mic 了解 http rpc mysql服务器 速度 anr ids
本文系统来源:https://www.cnblogs.com/nedulee/p/11839131.html
内容总结
以上是互联网集市为您收集整理的你了解MySQL中的多表联合查询吗?全部内容,希望文章能够帮你解决你了解MySQL中的多表联合查询吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。