Below is a query which takes 30+ seconds to run. Based on similar queries I have running, I can't see where the hold up is here. My only thought is joining the job user id to job_applicants user id, but they need to be mapped.
SELECT DISTINCT u.user_id, u.first_name, u.last_name FROM users u
LEFT OUTER JOIN employee_access ea ON ea.user_id = u.user_id
LEFT OUTER JOIN confirmation c ON c.user_id = u.user_id
LEFT OUTER JOIN job_applicants a ON a.user_id = u.user_id
LEFT OUTER JOIN job j ON j.job_id = a.job_id
WHERE ea.access_id = 4 OR c.access_id = 4 OR (a.process_level = 0 AND j.access_id = 4)
ORDER BY u.last_name asc
The following recommendations will help you in your SQL tuning process.
You'll find 3 sections below:
ALTER TABLE `confirmation` ADD INDEX `confirmation_idx_access_id` (`access_id`);
ALTER TABLE `employee_access` ADD INDEX `employee_access_idx_access_id` (`access_id`);
ALTER TABLE `job` ADD INDEX `job_idx_access_id_job_id` (`access_id`,`job_id`);
ALTER TABLE `job_applicants` ADD INDEX `job_applicants_idx_process_le_user_id_job_id` (`process_level`,`user_id`,`job_id`);
ALTER TABLE `users` ADD INDEX `users_idx_last_name` (`last_name`);
ALTER TABLE `users` ADD INDEX `users_idx_user_id_last_name` (`user_id`,`last_name`);
SELECT
u_user_id,
u_first_name,
u_last_name
FROM
((SELECT
DISTINCT u.user_id AS u_user_id,
u.first_name AS u_first_name,
u.last_name AS u_last_name
FROM
users u
WHERE
(
1 = 1
AND 1 = 1
)
AND (
EXISTS (
SELECT
1
FROM
job_applicants a
INNER JOIN
job j
WHERE
(
(
(
a.user_id = u.user_id
)
AND (
a.process_level = 0
)
)
AND (
j.job_id = a.job_id
)
)
AND (
j.access_id = 4
)
)
)
ORDER BY
u.last_name ASC)
UNION
DISTINCT (SELECT
DISTINCT u.user_id AS u_user_id,
u.first_name AS u_first_name,
u.last_name AS u_last_name
FROM
users u
INNER JOIN
confirmation c
ON c.user_id = u.user_id
WHERE
c.access_id = 4
ORDER BY
u.last_name ASC)
UNION
DISTINCT (SELECT
DISTINCT u.user_id AS u_user_id,
u.first_name AS u_first_name,
u.last_name AS u_last_name
FROM
users u
INNER JOIN
employee_access ea
ON ea.user_id = u.user_id
WHERE
ea.access_id = 4
ORDER BY
u.last_name ASC)
) AS union1
ORDER BY
union1.u_last_name ASC