关于SQL查询的问题

时间:2013-05-20 09:08:22

标签: sql select

我需要选择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')

先谢谢,

乔纳森

2 个答案:

答案 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'