table1 самая большая - более 300.000 записей
table2 - примерно 25000
остальные мизер. На всех полях что участвуют в объединении есть индексы. Результат запроса одинаков абсолютли---------- Добавлено 23.09.2017 в 13:04 ----------
Попробовал ваш запрос - результат тот же - время выполнения 4,4 сек. т.е. дольше всех
Chukcha, ну вы мастер - спасибо! :)))
только что понял что моя логика не верна. Если удалить у фирмы работников, то счетчик уже не обновлится при таких запросах....
Надо че-то еще придумать.
Вот эксплейн вашего запроса
Chukcha, спасибо - 0,6 сек. Почти в 2 раза быстрее - это предел?
count_do это и есть счетчик сотрудников в таблице x55_cl_items - он обновляется по крону раз в 10 минут (да там часто все меняется). Но запрос тяжеловат, я хочу попытаться сделать его побыстрее.
Додумался до того что не нужно апать всю таблицу x55_cl_items нужно апнуть только фирмы где есть сотрудники.
Пока у меня в голове родилась такая каша :))
Получаем список ID фирм в которых есть работники
1. SELECT `cl_id` FROM `x55_do_working` GROUP BY `cl_id` HAVING COUNT(*)=1
Делаем подсчет сколько работников в каждой фирме
2. SELECT COUNT(id) FROM `x55_do_working` WHERE `cl_id` = каждая из записей запроса №1
Апаем только те клиники где есть работники, а не все
3. UPDATE x55_cl_items SET count_do = ЗАПРОС №2 WHERE `id` = ЗАПРОС №1
Как все это собрать в 1 запрос?
c count(id) - 0.9 сек
с count(*) - 1,03 сек---------- Добавлено 21.09.2017 в 10:14 ----------Я тут понял как ускорить запрос - не нужно апать всю таблицу x55_cl_items
Нужно апать только те x55_cl_items.id которые равны x55_do_working.cl_id
т.е. как-то так (жирным добавил
---------- Добавлено 21.09.2017 в 10:19 ----------
Вопрос снят - сам допер как ускорить - WHERE t1.userid > 0
Вроде как для PHP 7 нужен не Memcache, а Memcached
https://habrahabr.ru/company/avito/blog/338140/
LEOnidUKG правильно советует обновить мускуль, очевидно же что это ваше самое слабое место, а вы оптимизируете все кроме него :)))