哪一个查询具有更好的性能?

时间:2010-01-04 09:54:34

标签: sql mysql

我有三个表,包含以下字段:

:class_id |名字|等级

classes_students :class_id | student_id数据

学生:student_id |名字

课程与学生有n:m的关系,所以一个班级可以有很多学生,一个学生可以听很多班级。我想选择特定班级的所有学生,其中class_id为5。

以下是三个执行相同操作的查询。我运行MySQL最新版本,InnoDB引擎。哪一个会表现出更好的表现?为什么?

查询A)

SELECT s.name
  FROM students s
  JOIN classes_students cs ON cs.student_id = s.student_id AND cs.class_id = 5

查询B)

SELECT s.name
  FROM students s
  JOIN classes_students cs ON cs.student_id = s.student_id
  JOIN classes c ON c.class_id = cs.class_id
 WHERE c.class_id = 5

查询C)

SELECT s.name 
 FROM students s 
 INNER JOIN classes_students cs ON cs.student_id = s.student_id
WHERE cs.class_id = 5

2 个答案:

答案 0 :(得分:3)

唯一真正的了解方法是尝试所有这些,并比较环境的性能。 始终在您的环境中测试查询,对它们进行基准测试以查看实际上最佳的效果,否则您将永远不会真正知道。

一般来说,假设所有索引都已到位,我预计B会变得更糟,因为它涉及更多的JOIN /更多表。 A和C我希望是相同的(可能会针对相同的执行计划进行优化)

答案 1 :(得分:1)

MySQL提供了 EXPLAIN 语句,详细说明了执行计划。

我没有运行它,但我的赌注是三个查询的处理方式完全相同。

如果你真的需要调整MySQL优化器,可以查看STRAIGHT_JOIN运算符,但MySQL通常非常聪明。