索引两表优化案例|学习笔记

本文涉及的产品
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 快速学习索引两表优化案例

开发者学堂课程【MySQL 高级应用 - 索引和锁索引两表优化案例】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/598/detail/8609


索引两表优化案例


内容介绍

一、首次 explain 分析

二、第二次 explain 分析

三、第三次 explain 分析


一、首次 explain 分析

mysql> select * from class;

image.png

这个是和业务无关的主键,共计20个,card 分类卡,对图书进行分类。

Mysql> select * from book inner join class on book.card=class.card:

//主外键进行关联,如下图所示

image.png

下面开始 explain 分析,输入:

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

//左表要全部查询

#结论:执行后发现 type ALL,如下图:

image.png

#添加索引优化

ALTER TABLE bookADD  INDEX  Y (‘card’);

//建立一个索引

 

二、第二次 explain 分析

这时索引加入左表 class 好还是右表 book 好仍未知,所以两边都试一下,我们新建索引:

mysql> ALTER TABLE `book`ADD INDEX Y(`card`);

Query OK,0 rows affected(0. 02 sec)

Records: 0 Duplicates :0 Warnings:0

继续输入:

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

结果如下:

image.png

此时左连接加到了右表上,可以看到第二行的 type 变成了 refrows 也好了很多,相比之前的双 ALL 优化明显,我们继续,此时将左连接加到左表上:

mysql> ALTER TABLE ` class `ADD INDEX Y(`card`);

Query OK,0 rows affected(0. 01 sec)

Records: 0 Duplicates :0 Warnings:0

同上继续输入:

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

得到:

image.png

已明显看出表格并未显示出有很大的优化,这是由左连接特性决定的,LEFT JOIN条件用于确定如何从右表中搜索,此时左边一定全部都有,所以右边是关键,要建立索引。此时注意若不想删除索引,也可直接调换两表位置如:

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

此时索引还在,但输出结果已变成左连接在左表时的样子。

 

三、第三次explain分析

现在来试试右连接的情况:

#优化较明显。这是因为 RIGT JOIN 条件用于确定如何从左表搜索行,右边一定都有,所以左边是我们的关键点一定要建立索引。

mysql> ALTER TABLE `class`ADD INDEX Y(`card`);

Query OK,0 rows affected(0. 05 sec)

Records: 0 Duplicates :0 Warnings:0

mysq1>EXPLAIN SELECT * FROM class RIGHT JOIN book ON class.card=book. card;

// class book 没有对调位置,把左边换成了右边。请注意左边和右边没变,但是 right jion 改变了,右表 book 现在都有,现在索引还是要建在 book ,最终执行结果如下图:

image.png

现在我们重新建立一个表,代码如下

Mysql>ALTER TABLE class ADD INDEX  Y(card);

Query ok, 0 rows affected (0,05 sec)

Records:0 duplicates:0 warnings:0

Mysql>explain select * from class right join book on class.card=book.card;

执行示例如下图所示:

image.png

此时右连接在左表上,结果是与左连接在右表相同,此时只要记住左表与右连接、右表与左连接,索引优化就完成了。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
17天前
|
关系型数据库 MySQL 数据库
MySQL索引优化:深入理解索引合并
MySQL索引优化:深入理解索引合并
|
2月前
|
存储 关系型数据库 MySQL
mysql索引优化,更好的创建和使用索引
mysql索引优化,更好的创建和使用索引
|
2月前
|
SQL 存储 关系型数据库
MySQL索引原理(索引、约束、索引实现、索引失效、索引原则)以及SQL优化
MySQL索引原理(索引、约束、索引实现、索引失效、索引原则)以及SQL优化
147 1
|
存储 SQL 架构师
Mysql进阶优化篇06——分组查询优化、分页查询优化、覆盖索引
Mysql进阶优化篇06——分组查询优化、分页查询优化、覆盖索引
|
存储 SQL 关系型数据库
Mysql优化之索引(二)
Mysql优化之索引(二)
Mysql优化之索引(二)
|
存储 关系型数据库 MySQL
|
缓存 关系型数据库 MySQL
索引三表优化案例|学习笔记
快速学习索引三表优化案例
71 0
索引三表优化案例|学习笔记
|
存储 SQL 关系型数据库
索引到底能提升多少查询效率?何时该使用索引?一文快速搞懂数据库索引及合理使用它
索引到底能提升多少查询效率?何时该使用索引?一文快速搞懂数据库索引及合理使用它
501 0
索引到底能提升多少查询效率?何时该使用索引?一文快速搞懂数据库索引及合理使用它
|
SQL 关系型数据库 MySQL
索引单表优化案例|学习笔记
快速学习索引单表优化案例
106 0
|
存储 SQL 缓存
MySql索引分析及查询优化
MySql索引分析及查询优化
188 0
MySql索引分析及查询优化