阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

SQL优化 MySQL版 -分析explain SQL执行计划

190次阅读
没有评论

共计 1351 个字符,预计需要花费 4 分钟才能阅读完成。

首先我们先创建一个数据库,数据库中分别写三张表来存储数据;

course: 课程表

teacher: 教师表

teacherCarid: 教师证表

SQL 优化 MySQL 版 - 分析 explain SQL 执行计划SQL 优化 MySQL 版 - 分析 explain SQL 执行计划 SQL 优化 MySQL 版 - 分析 explain SQL 执行计划

现在我把这三张表连起来查,查询条件:查询课程编号为 2 或教师证编号为 3 点老师信息;

通过这个例子,我们就可以把 explain 里面的参数一个一个的讲讲:

首先这 个条件的主干是查询老师信息

sql 语句:select t.* From teacher t INNER JOIN course c INNER JOIN teachercarid te WHERE t.tid = c.cid AND t.tcid = te.tcid AND (c.cid = 2 or te.tcid = 3);

执行结果:

SQL 优化 MySQL 版 - 分析 explain SQL 执行计划

SQL 语句很简单,我们不关心这个,我们关心的是在它前面加 explain

explain select t.* From teacher t INNER JOIN course c INNER JOIN teachercarid te WHERE t.tid = c.cid AND t.tcid = te.tcid AND (c.cid = 2 or te.tcid = 3);

执行看结果:

SQL 优化 MySQL 版 - 分析 explain SQL 执行计划

先看 id:

id 此时此刻都是 1,它们都对应我们的表 te 是我们的教师证表 t 就是教室表 c 是课程表

由此可见,我们编写的 SQL 语句它底层是先执行教师证表的,然后执行教室表,最后再执行课程表;

那这是为什么呢?

我们来分析一下数据:

course: 课程表 有三条数据

teacher: 教师表 有三条数据

teacherCarid: 教师证表 有四条数据

难道是数据越少就先执行谁?我们不妨来做个试验看看,我再加几条数据:

现在我们的数据变更为:

course: 课程表 有三条数据

teacher: 教师表 有四条数据

teacherCarid: 教师证表 有六条数据;

我们再看它的执行计划:

SQL 优化 MySQL 版 - 分析 explain SQL 执行计划

通过试验我们发现,确实谁少就先执行谁 ,但是我我们却发现,表的执行顺序是因数量的个数改变而改变,那它的原因是什么呢? 为什么表的执行顺序会跟随个数而改变呢

笛卡尔积

我们现在假设 a b 两张表,a 里面有三条数据,b 里面有六条数据,最后他俩相乘 = 18;

我们假设现在有 a b c 三张表,第一张表 a 是三条数据 第二张表是 3 条数据第三表的数据是 4,那它们的笛卡尔积 2*3 = 6 6 再 *4 = 24;

这个时候我们换一下位置 a 是四条数据 b 是三条数据 c 是两条数据,我们再来算一下它们的笛卡尔积:3*4 = 12 *2 = 24;

我们发现两者结果都没有变,但是中间结果变了,第一次计算笛卡尔积时 第一次计算 2 *3 =6,第二次计算笛卡尔积时 3 *4 = 12,因为 6 比 12 小索所以它就先执行;

为什么在图上,c 先执行的原因是 c * t (3*4 = 12)te 是 6, 所以比较大,就向后放;

结论:数据小的表,会优先查询;

ID 值越大越优先执行

id 值相同,就从上往下依次执行,如果不相同,那就从下往上执行,因为 id 值越大,它就越往下排列;

Select_type

PRIMARY: 包含查询 SQL 中的子查询(最外层)

SUBQUERY: 包含子查询 SQL 中的子查询(非最外层)

Simple: 简单查询(一个 SQL 语句里面不包含子查询,union)都是简单查询

derived: 衍生查询 触发子衍生查询只有两种:

1. 在 from 子查询中,只有一张表

2.在 from 子查询中如果有两张表,比如 tablie1 union table2,则 table1 就是衍生查询;

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1351字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中