0
点赞
收藏
分享

微信扫一扫

MySQL优化之关联查询优化

猎书客er 2022-02-21 阅读 57


前言

SQL语句优化是很重的一个事情。所以要去做。

正文

一、left join

先写一个SQL语句看看怎么性能如何:

MySQL优化之关联查询优化_mysql

这样的情况怎么去优化呢?肯定是使用到的查询字段去建索引。

哪就先给idx_card表的card字段加上索引看看有没有效果。

执行:

ALTER TABLE `book` ADD INDEX idx_card( `card`);

MySQL优化之关联查询优化_联查_02

建完索引后再接着运行咱们的查询语句看看怎么样了。

MySQL优化之关联查询优化_联查_03

果然是有点变化。

前边说过了,在使用的查询条件中添加索引,现在把刚建的索引删除,然后重新在class表中的card字段建一个索引。

删除索引:

drop index idx_card on book;

删除成功:

MySQL优化之关联查询优化_优化_04

然后重建索引:

alter table class add index idx_card(card);

新建成功:

MySQL优化之关联查询优化_联查_05

然后再运行查询语句会怎么样呢?

MySQL优化之关联查询优化_sql语句_06

通过show profiles;可以比较查询用时可以看的出来:

MySQL优化之关联查询优化_优化_07

最后咱们得出结论:

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

二、inner join

MySQL优化之关联查询优化_字段_08

将两个查询字段调换顺序,发现结果也是一样的

MySQL优化之关联查询优化_sql语句_09

在book表中,删除9条记录

MySQL优化之关联查询优化_优化_10

MySQL优化之关联查询优化_联查_11

结果显示:

MySQL优化之关联查询优化_mysql_12

再来试试straight_join的效果

MySQL优化之关联查询优化_优化_13

sql语句执行的结果:

MySQL优化之关联查询优化_字段_14

最终的结论:

inner join 时,mysql 会自己帮你把小结果集的表选为驱动表。

结束

今天受打击了,还是基础太差了,踏踏实实的吧!之前就是太浮躁了。



举报

相关推荐

0 条评论