我需要选择7A级学生的考试成绩,但需要查看另一个表(student_profile)来识别7A中的学生(通过student_id识别)。 我想知道以下哪种方法会更快,假设在两个表中创建了student_id的索引:
方法1:
select * from exam_results r
where exists
(select 1
from student_profile p
where p.student_id = r.student_id
and p.class = '7A')
方法2:
select * from exam_results
where student_id in
(select student_id
from student_profile
where class = '7A')
先谢谢,
乔纳森
答案 0 :(得分:2)
简短回答,没关系。查询引擎会对它们进行相同的处理。
就个人而言,我会考虑这种语法。
select
r.*
from
exam_results r
join
student_profile p
on p.student_id = r.student_id
where
p.class = '7A'
inner
如果省略则隐含。
您将获得相同的性能,因为现代查询引擎已经发展得很好,但我认为这种标准语法更易于扩展且更易于阅读。
如果将来扩展此查询,多个连接条件将比多个连接条件更容易优化。
答案 1 :(得分:0)
如果您比较两个查询,那么EXISTS
的查询会更快。然而,解决此类问题的正确方法(通常更快)是JOIN
。
select r.student_id, r.other_columns
from exam_results r
inner join student_profiles s
on r.student_id = s.student_id
where s.class = '7A'