当我编写一个根据 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 是否会根据哪一个更快/会过滤最多的条目来重新组织测试,还是只是按照给定的顺序执行它们?
最佳答案
是的,MySQL(以及任何 SQL 服务器)在开始工作之前会制定计划,并尝试采取尽可能最快的方法。 Explain给出了有关 MySQL 如何处理查询的一些信息。
关于sql - MySQL 如何处理 WHERE 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3635192/