Сейчас я использую примерно такие запросы
SELECT *
FROM `city`
LEFT JOIN `raion` ON `raion`.`id` = `city`.`raion`
LIMIT 5
В таблице city и raion большое количество записей, причем в оригинале там несколько джойнов и я задался вопросом по оптимизации. В запросе присутствует LIMIT и я задался вопросом на каком этапе он срабатывает, до джойна или после.
Если он сначала ищет множество записей к множеству городов а потом берет только 5 результатов то это создает нагрузку, а если берет пять городов а потом по ним и смотрит районы то это норм. Что можете пояснить?
Может быть легче было прогнать city по циклу и сделать пять быстрых запросов в raion?
Решил добавить боевой пример. Не судите строго. именно сейчас решил делать оптимизацию)
EXPLAIN SELECT z.*, fq.`text` AS `question`, c.id AS `clientYes`, u.`name` AS nameUslug, city.`name` AS cityName, COUNT(zl.`id`) AS `count_zl`, p.`name` AS `partner_name`
FROM `zaiavki` z
LEFT JOIN `ankets` a ON a.`id` = z.`anketa`
LEFT JOIN `clients` c ON c.phone = z.phone
LEFT JOIN `uslugi` u ON z.usluga = u.id
LEFT JOIN `city` ON city.id = z.city
LEFT JOIN `faq_question` fq ON fq.`zaiavka` = z.`id`
LEFT JOIN `zaiavki_nocall_log` zl ON zl.`id` = z.`id`
LEFT JOIN `partners` p ON p.`id` = z.`partner`
WHERE z.`status` = '0' AND z.`delete` = '1'
GROUP BY z.id ORDER BY z.dateCreated DESC, z.id DESC LIMIT 0, 20