mysql索引优化 - 多表关联查询优化

news/2023/9/27 5:59:27
1 left join
EXPLAIN SELECT * FROM class LEFT JOIN book ON class.card = book.card;
LEFT JOIN条件用于确定如何从右表搜索行, 左边一定都有,
#所以右边是我们的关键点,一定需要建立索引


结论:在优化关联查询时,只有在被驱动表上建立索引才有效! 
         
left join 时,左侧的为驱动表,右侧为被驱动表

2 right join
条件用于确定如何从左表搜索行, 右边一定都有
EXPLAIN SELECT*FROM class RIGHT JOIN book ON class.card=book.card;
所以左边是我们的关键点,一定需要建立索引

3 inner join 时
mysql 会自己帮你把小结果集的表选为驱动表。 
但是会强制将左侧作为驱动表!

记住:永远用小的结果集驱动大的结果集

4 多表关联时
EXPLAIN SELECT ed.name '人物',c.name '掌门' FROM (SELECT e.name,d.ceo from t_emp e LEFT JOIN t_dept d on e.deptid=d.id) ed LEFT JOIN t_emp c on ed.ceo= c.id;(较好


EXPLAIN SELECT e.name '人物',tmp.name '掌门' FROM t_emp e LEFT JOIN (SELECT d.id did,e.name FROM t_dept d LEFT JOIN t_emp e ON d.ceo=e.id)tmp ON e.deptId=tmp.did;

上述两个案例,第一个查询效率较高,且有优化的余地
第二个案例中,子查询作为被驱动表,由于子查询是虚表, 无法建立索引,因此不能优化。

结论子查询尽量不要放在被驱动表,有可能使用不到索引; 
          left join时,尽量让实体表作为被驱动表。


能够直接多表关联的尽量直接关联,不用子查询!
 

https://dhexx.cn/news/show-17241.html

相关文章

mysql索引优化 - 子查询优化

结论: 在范围判断时,尽量不要使用 not in 和 not exists,使用 left join on xxx is null 代替。 取所有不为掌门人的员工,按年龄分组! select age as 年龄, count(*) as 人数 from t_emp where id not in (select ceo…

树莓派折腾---红外探测

先上个图: 用到的配件: 1.主角:树莓派 2.配角:红外探测 3.打杂:面包板,杜邦线,蜂鸣器,LED,电阻 红外探测有三个针脚,两端的是供电,中间是信号输出…

mysql索引优化 - 排序分组优化

where 条件和 on 的判断这些过滤条件,作为优先优化的部分,是要被先考虑的! 其次,如果有分组和排序,那么 也要考虑 grouo by 和 order by。1. 必须有过滤,才会用到索引 结论:where,li…

UIView详解

来源:http://blog.csdn.net/chengyingzhilian/article/details/7894276 UIView表示屏幕上的一块矩形区域,它在App中占有绝对重要的地位,因为IOS中几乎所有可视化控件都是UIView的子类。负责渲染区域的内容,并且响应该区域内发生的…

jmeter基础入门(HTTP,TCP,SQL查询,新增,查看报告)

示例下载地址 https://download.csdn.net/download/qq_41712271/20398149有坑的地方 1 发送TCP请求,注意Tcp client classname,如下图,这里发送16进制,所以写 BinaryTCPClientImpl TCPClientImpl:纯文本为内容进行发送 BinaryT…

这么方便吗?用ChatGPT生成Excel(详解步骤)

文章目录前言使用过 ChatGPT 的人都知道,提示占据非常重要的位置。而 Word,Excel、PPT 这办公三大件中,当属 Excel 最难搞,想要熟练掌握它,需要记住很多公式。但是使用提示就简单多了,和 ChatGPT 聊聊天就能…

jenkins持续集成入门1

jenkins持续集成相关的软件安装分布架构图 软件安装的列表如下: jdk8或以上 maven git GitLab-EE Docker Harbor (docker私服) jenkins SonarQube (代码审查) Tomcat

HTML5新增Canvas标签及对应属性、API详解(基础一)

知识说明: HTML5新增的canvas标签,通过创建画布,在画布上创建任何想要的形状,下面将canvas的API以及属性做一个整理,并且附上时钟的示例,便于后期复习学习!Fighting! 一、标签原型 &…

gitlab 使用中碰到的常见问题整理

1 gitlab的默认域名为http://gitlab.example.com,如何修改https://blog.51cto.com/u_3265857/2347596 2 windows下向gitlab提交代码,如果添加ssh认证https://www.cnblogs.com/573734817pc/p/13711146.html 3 gitlab push时报错error:failed to push som…

HDU 4793 2013 Changsha Regional Collision[简单的平面几何]

圆形奖章给定半径的半径和圆形区域。另一个硬币的半径,然后在桌面上平稳。给定硬币的速(的大小和方向,vx,vy)和坐标(奖牌同心圆形区域,圆和心脏为源),Q币在一个圆形区域和…