2010-01-04 41 views
-1

我有三个表,这些字段:哪一个查询具有更好的性能?

:class_id |名称|等级

classes_students:class_id | student_id

学生:student_id |名字

班级与学生有一定比例的关系,所以一个班级可以有很多学生,一个学生可以听很多班级。我想选择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 
+0

在提出的查询的查询计划中可能没有任何显着差异。但C是表达查询内容的最自然的方式;跟着去吧。 – bobince 2010-01-04 10:12:29

+0

我已经低估了这个问题。 OP是否设定为测试?为什么OP没有告诉我们哪个显示更好的性能。 – 2010-01-04 10:47:11

回答

1

MySQL提供的EXPLAIN语句,将您详细的执行计划。

我没有运行它,但我敢打赌,这三个查询处理方式完全一样。

如果你真的需要调整MySQL优化器,你可以看看STRAIGHT_JOIN操作符,但MySQL通常很聪明。

3

知道唯一正确的方法是到t ry他们全部,并比较你的环境表现。 总是在您的环境中测试查询,并对它们进行基准测试,以查看实际执行情况的最佳方式,因为您永远无法真正了解其他情况。

一般而言,假设所有索引都已到位,我期望B最差,因为它包含更多JOIN /更多表。 A和C,我期望是一样的(可能会进行优化,以相同的执行计划)

相关问题