На instagram_accounts
у вас есть заданные критерии c до user_id
, is_deleted
, но также username
. Поскольку вы также сортируете по имени пользователя, первое исправление заключается в добавлении индекса.
CREATE INDEX user_id_deleted_username ON
instagram_accounts(user_id, is_deleted, username);
В appeal_process
вы ищете по ig_account_id
как в подзапросе JOIN
, так и tmp
:
CREATE INDEX id_account_id ON
appeal_process ( ig_account_id)
В запросе вы получаете статус максимального идентификатора процесса апелляции для пользователя. Позволяет GROUP BY ig.id
, и это упрощает получение результатов, поскольку MAX
и другие для каждой группы (изменения в CAP для акцентирования):
select
ig.id,
ig.username,
ig.created,
ig.is_completed,
ig.user_id,
ig.is_error,
ig.last_appeal_process_update,
(unix_timestamp() - ig.created) as time_running,
ig.is_deleted,
COALESE(MAX(ap.id),0) as appealprocessid,
(SELECT status FROM appeal_process WHERE appeal_process.id = appealprocessid LIMIT 1) as current_status,
COUNT(*) as total_appeals
from instagram_accounts ig
left join appeal_process ap on ig.id = ap.ig_account_id
where
(ig.username like CONCAT('%',?,'%') or ig.id like CONCAT('%',?,'%') or ig.username like CONCAT('%',?,'%')) and
ig.user_id = ? and is_deleted = 0
GROUP BY ig.id
order by ig.username asc
limit ?,?