LEFT JOIN 嵌套子查询时速度慢的问题

tab_student为 左表,5000+数据,存储三个年级的学生基本信息,通过‘入学年份’区分
yk_2020为 右表,30000+数据,存储学生多次考试成绩,根据‘考试编号’区分
现要查询2020级学生的某次成绩,
代码如下:

SELECT st.学号,st.姓名,st.班级,sc.总分
FROM (SELECT 学号,姓名,班级 FROM tab_student where 入学年份=2020 and 在班状态=1 )st
left join (select 学号,总分 from yk_2020 where 考试编号=’2020313’) sc on st.学号=sc.学号

存在问题,查询需要5秒左右。
有没有办法能优化。特请指点。感激。

讨论数量: 9

类似这样?

SELECT a.学号, a.姓名, a.班级, b.总分
FROM tab_student a
LEFT JOIN yk_2020 b
       ON a.学号 = b.学号
      AND b.考试编号 = '2020313'
WHERE 入学年份 = 2020
  AND 在班状态 = 1
1年前 评论
mysqlhk (楼主) 1年前
wxf666 (作者) 1年前
mysqlhk (楼主) 1年前
wxf666 (作者) 1年前

索引也都试过了。问题出在子查询没有索引吧。

1年前 评论

提供一下两张表的 CREATE 语句

1年前 评论

问题已解决,是字段类型不同导致的。 经验总结,作为查询的链接字段,字段类型要一致,且都加了索引。 原贴在这里。ask.csdn.net/questions/7871274

1年前 评论

没有用的,先单表查吧,leftjoin 在 数据量越来越多的情况下,只会越来越慢,单表查性能大幅提高,先获取2个表的学生id,再并集,单表分页,或者id 进行分页,只获取20个id 去leftjoin,这样是最快的,所以现在没问题,后期数据越多,时间也会越来越慢,这sql本来就不行

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!