2010-09-03 104 views
0

当我编写一个根据GET参数构建MySQL请求的PHP页面时,我想知道MySQL是否对请求中的WHERE测试进行了任何重组,或者只是在它们到达时才进行测试。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

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

+0

好的,谢谢。 EXPLAIN非常有用:) – Jukurrpa 2010-09-03 11:25:46