创建表
其余俩张边在双表优化的案例说过,过去直接复制即可
双表优化
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)
资料下载:
模拟数据
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
分析语句
看到下面的语句,全部进行了全表扫描
1 explain select * from class left join book on class.card=book.card left join phone on book.card=phone.card
建立索引
在双表优化中我们知道了,在使用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
分析语句
此次优化总结
- 在进行双表联查时我们使用了left join
- 第一次在左边的表加了索引
- 但是没有效果
- 这是由左连接的特性决定的,left join 是明确左边表的数据肯定都有,从右边表进行查询数据
- 所以右边是关键,我们一定要加上索引
- 那么三表查询也是同样的,反正记住一点,左连接加右表,右连接加到左表
- 小表驱动大表
————————————————
原文链接:https://blog.csdn.net/fangkang7/article/details/105301532