格式化后的优化SQL如下:
优化后两表t1,t2都走索引 , 并且都只有一条结果返回,因此都只会扫描一行,数据量一样,所以谁在前面谁就是驱动表 , 也就是上面sql中表t2 。一切都释然,豁然开通!
回头再仔细想想,高,实在是高!仔细深思之后MySQL优化后的句子真让人猛拍大腿 。高明之处在于:
1. 本来join连接是个M*N的嵌套循环,优化后变成了M+N的判断,两表不再嵌套判断了 。
2. 优化后,两表没有多大必然联系,只需把两表的结果集拼接即可 , 互不干扰 。如果mysql未来可以多线程查询,岂不十分快哉!
小伙伴们还记得我们在上一章MySQL索引初探中编码类型不一致发生隐式转换时有时候走索引 , 有时候索引又失效的问题吗?下面我们选取有代表性的一条记录来分析:
其中表demo_test总共有640条数据,demo_test_ass有3条数据 。显然经过过滤条件t.rid1完成后demo_test_ass数据量?。?应该作为驱动表 。虽然test.c_utf8mb4 = t.c2两字段连接中发生了t.c2字段发生隐式转换,但是实际上并不影响被驱动表test上的c_utf8mb4索引 。
好了 , 本章到此结束,让我们一起总结一下MySQL驱动表与被驱动表的选取原则:
?? ? 同等条件,优先选取有索引的表作为被驱动表 。在此介绍一下什么叫同等条件,比如上面的②中的语句 。两表没有其他额外的过滤条件,因此选关联字段有索引的t1作为被驱动表 。但是如果加了条件(and t1.id=3),此时t1数据量少,就选取了t2作为被驱动表 。
??? MySQL选择驱动表与被驱动表是基于优化器优化后的,小表是驱动表,大表是被驱动表 。基于优化器优化后开篇的 博文A与B 结论成立 。
当然这都是我一家之言,并不是官方结论,目前暂未找到官方确切对于驱动表与被驱动表的解释,请大家踊跃拍砖!
13.MySQL联表查询中的驱动表,优化查询,以小表驱动大表=========================总结===========================
1.开启慢查询日志 , 设置阀值,比如超过5秒就是慢SQL,并把它抓取出来 。
2.explain+慢SQL 分析
3.show profile 查询SQL在MySQL服务器里面的执行细节和声明周期 。
mysql join 谁是驱动表首先,MySql join连接可以连接两张或更多的数据表,但是并没有谁是“驱动表”之说 。
Join分为"inner join"内连接和"outer join"外连接两种形式,外连接还可以进一步分为左连接和右连接 。
内连接(inner join)只输出被连接的表它们的关联字段拥有交集的那些记录行,没交集的记录行将被剔除掉 。
外连接(left join左连接/right join右连接):
"left join" 输出左表所有的记录行和右表之间关联字段拥有交集的记录行,对于右表找不到对应记录行的,数据库引擎会将空值Null赋值到右表的各个字段里 。
"right join"的情况则于"left join" 刚好相反 。
"inner join"——只输出表之间存在交集的那些记录行;
"left join" ——输出左表所有的记录行以及右表与之有交集的记录行 , 右表找不到对应
记录的,数据库引擎则将Null赋值到右表的各个字段;
"right join"——输出右表所有的记录行以及左表与之有交集的记录行,左表找不到对应
记录的,数据库引擎则将Null赋值到左表的各个字段;
mysql怎么看驱动表的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mysql驱动cj、mysql怎么看驱动表的信息别忘了在本站进行查找喔 。
推荐阅读
- sap457的简单介绍
- sqlserver延时注入,sqlserver延时函数
- postgresqlkill连接的简单介绍
- 钉钉上怎样直播换背景图片,钉钉直播如何设置背景图片
- vb.net单个实例的简单介绍
- wordpress自动更新友情链接,wordpress自动更新文章
- lol各大服务器,lol服务器都在哪个城市
- 无人直播陆可,无人直播是啥
- 瀚高数据库php连接 瀚高数据库默认密码