MySQL如何处理WHERE测试?

时间:2010-09-03 11:15:34

标签: sql mysql where-clause

当我编写一个根据GET参数构建MySQL请求的php页面时,我想知道MySQL是否在请求中对WHERE测试进行了任何类型的重组,或者它是否只是在它们到来时进行。

例如,如果我执行此请求:

SELECT * FROM `table` t WHERE (SELECT `some_value` FROM `another_table` u WHERE `t.id` = `u.id` LIMIT 1) = 10 AND `a_boolean` = 1;

显然第二次测试更快并且首先执行它会过滤很多条目,因此对于其他测试会有更少的子请求。 那么,MySQL是根据哪一个更快/将过滤大多数条目重新组织测试,还是只按给定的顺序执行它们?

2 个答案:

答案 0 :(得分:2)

是的,MySQL(以及任何SQL服务器)在开始工作之前制定计划,并尝试尽可能采用最快的方法。 Explain提供了有关MySQL如何处理查询的一些信息。

答案 1 :(得分:1)

您可以使用EXPLAIN (documentation)查找有关任何查询的详细信息。