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

D
На сайте с 28.06.2008
Offline
980
438

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

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
412
#1

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

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

LEOnidUKG
На сайте с 25.11.2006
Offline
1553
#2

К чему это?

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

✅ Трастовых площадок под размещение статей и ссылок. Опыт 12 лет! ( https://searchengines.guru/ru/forum/675690 ) ⭐ Купить вечные трастовые ссылки для сайта ( https://getmanylinks.ru/?srh ) ⭐ Ускорение ваших сайтов (WP, Opencart и др.) + Настройка сервера ( https://searchengines.guru/ru/forum/997205 )

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