5

假设我有两张桌子,

   Student                           Test

Id    Name                   TestId   Type  StudentId
--    ----                   ------   ----  --------- 
1     Mark                     774    Hard     1  
2     Sam                      774    Hard     2 
3     John                     775    Easy     3

现在我必须找到那些在 MySql 中参加过“硬”类型测试的学生(学生 id、姓名和 testid)。

哪个更好(在性能方面)?

1.Select student.id,student.name,test.testid 
  from student 
  join test 
  on test.studentid=student.id and test.type='hard'

2.Select student.id,student.name,test.testid 
  from student 
  join test 
  on test.studentid=student.id 
  where test.type='hard'

我可以知道原因吗?(假设有数百万学生和数百万种测试)

4

3 回答 3

6

两者相同,但性能不同EXPLAIN PLAN如果您想选择性能更好的查询,我建议您使用查询。

看看了解查询执行计划

INDEXES您还可以使用最常用的 in子句来改进查询WHERE,也可以查看关系代数。

于 2012-07-05T11:20:52.650 回答
0

从性能上讲,这两者大致相同。您可以使用 EXPLAIN 命令验证这一点。

因此,问题变成了数据模型表达的清晰性之一。它可能看起来像天使在针头上跳舞。但是,如果您使用 JOIN 命令提取所有测试结果,然后请求一个子集,请使用WHERE type='hard'.

但是,如果从概念上讲,你只拉硬的,那么就使用这个ON公式。

请注意,如果您使用LEFT JOIN. 如果您将ON公式LEFT JOIN用于

于 2012-07-05T11:26:58.887 回答
0

这些查询完全相同,并且应该具有完全相同的查询计划。执行时间不太可能有任何可测量的差异。

但是,如果您更改JOINLEFT JOIN. 在这种情况下,您需要使用第一个版本。第二个版本不会给出相同的结果。

于 2012-07-05T11:19:56.803 回答