Using index; Using temporary; Using filesort при простом запросе

D
На сайте с 28.06.2008
Offline
1101
481

Помогите понять почему при простом запросе мускуль создает временную таблицу?

Update xy_firm_items c LEFT JOIN (SELECT COUNT(id) total, firm_id FROM xy_pipl_working GROUP BY firm_id) ct ON (c.id = ct.firm_id) SET count_pipl = ifnull(ct.total,0)

EXPLAIN говорит что запрос использует индекс по полю firm_id

rows - 288308

Extra - Using index; Using temporary; Using filesort для таблицы xy_pipl_working

---------- Добавлено 12.01.2019 в 18:39 ----------

методом научного тыка нашел что если заменить LEFT JOIN на RIGHT JOIN временная таблица не создается. Меняется ли логика запроса если заменить лево на право?

IL
На сайте с 20.04.2007
Offline
435
#1

Чтобы не поменялась логика запроса, при замене Left Join на Right Join следует и таблички поменять местами.. :)

Логика, конечно, изменится - если для некоторых xy_firm_items отсутствуют xy_firm_items, то этих строк (с нулями) не будет в итоговом отчёте.

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#2

К чему это?

Тут лучше упростить запрос, и сделать из него два например, чтобы не было всё в одно. В первом запросить нужные данные, а записывать уже готовые данные.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий