MySQL优化之关联查询优化

前言

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

正文

一、left join

先写一个SQL语句看看怎么性能如何:
MySQL优化之关联查询优化_第1张图片
这样的情况怎么去优化呢?肯定是使用到的查询字段去建索引。
哪就先给idx_card表的card字段加上索引看看有没有效果。
执行:

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

在这里插入图片描述
建完索引后再接着运行咱们的查询语句看看怎么样了。
MySQL优化之关联查询优化_第2张图片
果然是有点变化。
前边说过了,在使用的查询条件中添加索引,现在把刚建的索引删除,然后重新在class表中的card字段建一个索引。
删除索引:

drop index idx_card on book;

删除成功:
在这里插入图片描述
然后重建索引:

alter table class add index idx_card(card);

新建成功:
在这里插入图片描述
然后再运行查询语句会怎么样呢?
MySQL优化之关联查询优化_第3张图片
通过show profiles;可以比较查询用时可以看的出来:
MySQL优化之关联查询优化_第4张图片

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

二、inner join

MySQL优化之关联查询优化_第5张图片
将两个查询字段调换顺序,发现结果也是一样的
MySQL优化之关联查询优化_第6张图片
在book表中,删除9条记录

在这里插入图片描述
MySQL优化之关联查询优化_第7张图片

结果显示:
MySQL优化之关联查询优化_第8张图片
再来试试straight_join的效果
MySQL优化之关联查询优化_第9张图片
sql语句执行的结果:
MySQL优化之关联查询优化_第10张图片

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

结束

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

你可能感兴趣的:(MySQL,mysql,优化,联查)