In case you have your own slow SQL query, you can optimize it automatically here.
For the query above, the following recommendations will be helpful as part of the SQL tuning process.
You'll find 3 sections below:
ALTER TABLE `Task` ADD INDEX `task_idx_id` (`id`);
ALTER TABLE `Task_Department_Combi` ADD INDEX `task_combi_idx_task_id_department_id` (`Task_id`,`Department_id`);
ALTER TABLE `Task_Location_Combi` ADD INDEX `task_combi_idx_task_id_location_id` (`Task_id`,`Location_id`);
ALTER TABLE `Task_Worker_Combi` ADD INDEX `task_combi_idx_worker_id` (`Worker_id`);
ALTER TABLE `Worker` ADD INDEX `worker_idx_id` (`id`);
SELECT
W.id,
W.Name,
COUNT(TWC.Task_id) AS Count
FROM
Worker AS W
LEFT JOIN
Task_Worker_Combi AS TWC
ON (
W.id = TWC.Worker_id
)
WHERE
W.id > 0
AND EXISTS (
SELECT
1
FROM
Task AS T
LEFT JOIN
(
Task_Location_Combi AS TLC, Task_Department_Combi AS TDC
)
ON (
T.id = TLC.Task_id
AND T.id = TDC.Task_id
)
WHERE
(
1
AND TLC.Location_id IN (
1, 2
)
AND TDC.Department_id IN (
3, 4
)
)
AND (
TWC.Task_id = T.id
)
GROUP BY
T.id
ORDER BY
NULL
)
GROUP BY
W.id
ORDER BY
W.Name