MySQL优化|一分钟带你了解三表联查优化

创建表

其余俩张边在双表优化的案例说过,过去直接复制即可
双表优化

1 CREATE TABLE IF NOT EXISTS `phone` (
2 `phoneid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
3 `card` INT(10) UNSIGNED NOT NULL,
4 PRIMARY KEY (phoneid)
5 );

在开始前,分享给大家我看过觉得讲数据库讲的算是很不错的,也在B站拥有百万播放量的教程。

这个MySQL视频是动力节点的老杜讲解,个人也很喜欢老杜的教学风格。

涵盖了MySQL的相关知识,包括MySQL概述,MySQL应用环境,MySQL系统特性,MySQL初学基础,MySQL管理工具,如何安装MySQL及MySQL新特性等等。

学完这套视频基本可掌握MySQL全套知识了,值得收藏学习,需要的小伙伴点击以下链接??

在线观看:

最实用的MySQL教程视频课程 - MySQL - 动力节点在线 (bjpowernode.com)

资料下载:

MySQL视频教程全套免费下载【适合零基础入门学习】 - 动力节点 (bjpowernode.com)

模拟数据

1 INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
2 INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
3 INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
4 INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
5 INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20))); I
6 INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));

查询语句

1 select * from class left join book on class.card=book.card left join phone on book.card=phone.card

MySQL优化|一分钟带你了解三表联查优化

 

分析语句

看到下面的语句,全部进行了全表扫描

1 explain select * from class left join book on class.card=book.card left join phone on book.card=phone.card

MySQL优化|一分钟带你了解三表联查优化

 

建立索引

在双表优化中我们知道了,在使用left join时需要给右表添加索引,这是由左连接的特性决定的,left join 是明确左边表的数据肯定都有,从右边表进行查询数据

根据我们之前的学习开始建立索引,那么这个索引就应该建立在book和phone上,那么下来我们开始建立索引

1 # 创建索引
2 create index ind_card on book(card)
3 create index ind_card on phone(card)
4 
5 # 查看索引
6 show index from book
7 show index from phone

MySQL优化|一分钟带你了解三表联查优化

 

分析语句

MySQL优化|一分钟带你了解三表联查优化

 

 此次优化总结

  • 在进行双表联查时我们使用了left join
  • 第一次在左边的表加了索引
  • 但是没有效果
  • 这是由左连接的特性决定的,left join 是明确左边表的数据肯定都有,从右边表进行查询数据
  • 所以右边是关键,我们一定要加上索引
  • 那么三表查询也是同样的,反正记住一点,左连接加右表,右连接加到左表
  • 小表驱动大表

————————————————

原文链接:https://blog.csdn.net/fangkang7/article/details/105301532

MySQL优化|一分钟带你了解三表联查优化

上一篇:adb 环境搭建


下一篇:Mybatis-Plus的应用场景及注入SQL原理分析