Ответ на ваш вопрос будет варьироваться в зависимости от вашей схемы, сложности ваших запросов, надежности ваших данных и т. Д. Общее практическое правило - попытаться обработать как можно меньше данных, что обычно означает фильтрацию это на самом низком возможном уровне.
Когда вы хотите оптимизировать запрос, абсолютное число, с которого нужно начинать, это использовать вывод EXPLAIN , чтобы увидеть, какие оптимизации анализатор запросов смог выяснить, и проверить, что является самой слабой ссылкой в плане запроса. Разрешите это, промойте, повторите.
Вы также можете использовать «расширенное» ключевое слово объяснения, чтобы увидеть фактический запрос, который он построил для выполнения, что позволит узнать больше об использовании ваших критериев. В некоторых случаях это оптимизирует дублирование условий между родителями / подзапросами. В других случаях это может подтолкнуть условия от родителя к подзапросу. В некоторых случаях для (слишком) сложных запросов я видел, как оно повторяет условие, когда оно было указано в запросе только один раз. К счастью, вам не нужно догадываться, план объяснения mysql покажет все, хотя иногда и загадочно.