代码第四行和第五行不是差不多吗

来源:7-16 【实战】 分析SQL的执行计划-[type列]续

慕的地8103524

2020-04-02

1、代码第四行和第五行不是差不多吗,
b.class_id=a.class_id
c.level_id=a.level_id
为什么b表就是eq_ref ,c表就是全表扫描,c表不也是有a.level_id来索引吗
2、为什么 第一个from imc_course a 就是全表扫描,第二个from a 就用到索引了呢,这不都执行的差不多吗
3、ID为2的为什么没有
join imc_class b on b.class_id=a.class_id
这一句就不用执行吗

好奇怪啊总觉得漏掉了什么很重要的知识点

写回答

4回答

慕的地8103524

提问者

2020-04-03

//img1.sycdn.imooc.com/szimg/5e873e7509e639d113790282.jpg

。。。

0
0

慕的地8103524

提问者

2020-04-03

//img1.sycdn.imooc.com/szimg/5e86ddb009f1853b00000000.jpg

//img.mukewang.com/szimg/5e86ddb0091fc9ec00000000.jpg

//img.mukewang.com/szimg/5e86ddb00981faf909410515.jpg

//img.mukewang.com/szimg/5e86ddb009ba632314390606.jpg

老师三张表的具体内容都在这了


0
3
sqlercn
回复
慕的地8103524
1.第四行和第五行并不相同,这两处引用的表不一样。 2.上面的查询计划中两个a表都未用到索引 3.id为2的没有是什么意思不是很清楚
2020-04-04
共3条回复

慕的地8103524

提问者

2020-04-02

我的运行结果跟老师的不一样。。//img1.sycdn.imooc.com/szimg/5e860b97093b890613000594.jpg

0
0

sqlercn

2020-04-02

  1. 这要看c 表的数据分布情况,如果查询中命中了c表的大部分数据,则MySQL优化器就不会使用索引,而是用全表扫描。

  2. 同上,要看具体的数据分布和查询条件

  3. 你看一下两个表的数据,看看 class_id相同的值里是否包括那条数据?

0
3
慕的地8103524
回复
sqlercn
老师图片我发在上面了,麻烦了
2020-04-03
共3条回复

零基础入门 详解企业主流数据库MySQL8.0

掌握SQL优化与慢查询优化,具备独当一面的能力

1641 学习 · 485 问题

查看课程