0

我需要选择 7A 班学生的考试成绩,但需要查看另一个表(student_profile)来识别 7A 中的学生(通过 student_id 识别)。我想知道以下哪种方法会更快,假设在两个表中都创建了 student_id 的索引:

方法一:

select * from exam_results r
where exists
 (select 1 
  from student_profile p
  where p.student_id = r.student_id
    and p.class = '7A')

方法二:

select * from exam_results
where student_id in
 (select student_id
  from student_profile
  where class = '7A')

提前致谢,

乔纳森

4

2 回答 2

2

简短的回答,没关系。查询引擎将对它们一视同仁。

就个人而言,我会考虑这种语法。

select
            r.*
    from
            exam_results r
        join
            student_profile p
                on p.student_id = r.student_id
    where
           p.class = '7A'

inner如果省略,则为隐式。

您将获得相同的性能,因为现代查询引擎开发良好,但我认为这种标准语法更具可扩展性且更易于阅读。


如果您将来扩展此查询,多个连接条件将比多个存在或 ins 更容易优化。

于 2013-05-20T09:20:21.007 回答
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'
于 2013-05-20T09:17:33.123 回答