700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > mysql索引优化 - 多表关联查询优化

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

时间:2022-04-01 00:26:29

相关推荐

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

1 left join

EXPLAIN SELECT * FROM class LEFT JOIN book ON class.card = book.card;

LEFT JOIN条件用于确定如何从右表搜索行, 左边一定都有,

#所以右边是我们的关键点,一定需要建立索引。

结论:在优化关联查询时,只有在被驱动表上建立索引才有效!

left join 时,左侧的为驱动表,右侧为被驱动表

2right 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时,尽量让实体表作为被驱动表。

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。