MST

星途 面试题库

面试题:MySQL高级难度面试题:等值传递优化策略实践

假设有一个数据库,包含三张表:`students`(学生表,字段有`student_id`、`name`等),`scores`(成绩表,字段有`student_id`、`course_id`、`score`),`courses`(课程表,字段有`course_id`、`course_name`)。现在要查询选修了‘数学’课程且成绩大于80分的学生姓名,在使用等值传递优化策略时,如何书写SQL语句能够更高效地执行?请解释你的思路以及该优化策略在此处的作用。
20.7万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试
  1. SQL语句
SELECT s.name
FROM students s
JOIN scores sc ON s.student_id = sc.student_id
JOIN courses c ON sc.course_id = c.course_id
WHERE c.course_name = '数学' AND sc.score > 80;
  1. 思路
    • 首先通过JOIN操作将三张表连接起来。连接条件为students表的student_idscores表的student_id相等,scores表的course_idcourses表的course_id相等。这样可以将三张表中相关的数据关联起来。
    • 然后在WHERE子句中添加筛选条件,即课程名称为‘数学’且成绩大于80分。通过这种方式,最终得到选修了‘数学’课程且成绩大于80分的学生姓名。
  2. 等值传递优化策略的作用
    • 在数据库查询优化中,等值传递优化策略是指在连接条件中,如果存在多个等值条件,数据库可以利用这些等值关系,提前进行数据过滤和关联操作,减少中间结果集的大小。
    • 在此查询中,通过连接条件s.student_id = sc.student_idsc.course_id = c.course_id形成了等值传递关系。数据库在执行查询时,可以利用这些等值条件,提前对数据进行过滤和关联,避免生成大量不必要的中间结果。例如,数据库可以先根据course_name = '数学'courses表中筛选出数学课程的course_id,然后利用sc.course_id = c.course_id的等值关系,在scores表中快速定位到选修数学课程的成绩记录,再通过s.student_id = sc.student_id的等值关系,在students表中获取对应的学生姓名。这样减少了全表扫描的次数,提高了查询效率。