当我编写一个根据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是根据哪一个更快/将过滤大多数条目重新组织测试,还是只按给定的顺序执行它们?
答案 0 :(得分:2)
是的,MySQL(以及任何SQL服务器)在开始工作之前制定计划,并尝试尽可能采用最快的方法。 Explain提供了有关MySQL如何处理查询的一些信息。
答案 1 :(得分:1)
您可以使用EXPLAIN
(documentation)查找有关任何查询的详细信息。