Как MySQL обрабатывает тесты WHERE? - PullRequest
0 голосов
/ 03 сентября 2010

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

Ответы [ 2 ]

2 голосов
/ 03 сентября 2010

Да, MySQL (и любой SQL-сервер) составляет план, прежде чем приступить к работе, и старается использовать максимально быстрый подход. Объясните дает некоторую информацию о том, как MySQL обрабатывает запрос.

1 голос
/ 03 сентября 2010

Вы можете использовать EXPLAIN (документация) , чтобы узнать подробности о любом запросе.

...