Когда я кодировал страницу php, создавая запрос MySQL в соответствии с параметрами GET, мне было интересно, выполняет ли 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 реорганизует тесты, в соответствии с которыми один из них быстрее / будет фильтровать большинство записей, или он просто выполняет их в заданном порядке?