哪一个查询具有更好的性能?
问题描述:
我有三个表,这些字段:哪一个查询具有更好的性能?
类: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
答
MySQL提供的EXPLAIN语句,将您详细的执行计划。
我没有运行它,但我敢打赌,这三个查询处理方式完全一样。
如果你真的需要调整MySQL优化器,你可以看看STRAIGHT_JOIN操作符,但MySQL通常很聪明。
答
知道唯一正确的方法是到t ry他们全部,并比较你的环境表现。 总是在您的环境中测试查询,并对它们进行基准测试,以查看实际执行情况的最佳方式,因为您永远无法真正了解其他情况。
一般而言,假设所有索引都已到位,我期望B最差,因为它包含更多JOIN /更多表。 A和C,我期望是一样的(可能会进行优化,以相同的执行计划)
在提出的查询的查询计划中可能没有任何显着差异。但C是表达查询内容的最自然的方式;跟着去吧。 – bobince 2010-01-04 10:12:29
我已经低估了这个问题。 OP是否设定为测试?为什么OP没有告诉我们哪个显示更好的性能。 – 2010-01-04 10:47:11