TroL929
@TroL929
веб-программист

Правильно ли я использую JOIN в mysql?

Сейчас я использую примерно такие запросы
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


20d42ef5f8094c4b99ab4aa1567e84c1.png
  • Вопрос задан
  • 299 просмотров
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега MySQL
На все ваши вопросы ответит EXPLAIN. Оптимизатор mysql может сгенерировать разный план выполнения для одного и того же запроса в зависимости от размера таблиц, от того как они используются и ещё от кучи разных факторов, поэтому однозначно ответить на ваш вопрос невозможно - нужно смотреть на конкретных данных.
https://habrahabr.ru/post/211022/
Ответ написан
sanchezzzhak
@sanchezzzhak
Ля ля ля...
Вячеслав Беляев: посмотрите на Type = all это означает полный проход по таблице попробуйте добавить индекс, чтобы не выбирать все записи из join таблиц
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы