Пожалуйста, попробуйте эти три индекса и посмотрите, решают ли они вашу проблему с производительностью. (Затем посмотрите план объяснения, чтобы увидеть, какие из этих индексов не используются, и отбросьте их.)
create index idx1 on account (group_id, id, app_id);
create index idx2 on user_account_ref (user_id, account_id);
create index idx3 on user_account_ref (account_id, user_id);
idx1
- для ускорения вашего account
самостоятельного объединения. idx2
и idx3
- два предложения СУБД для быстрого присоединения к таблице user_account_ref
. Надеемся, что СУБД выберет один из них и, таким образом, ускорит выполнение запроса.
Если эти индексы не помогают, вы можете сначала попытаться отбросить только idx3
, чтобы вызвать принудительное действие idx2
так как кажется, что условие для пользователей сильно уменьшает количество строк, которые нужно просматривать, и СУБД может не знать об этом.
Наконец-то вы можете обновить статистику таблиц MySQLs, чтобы СУБД знала ваше таблицы лучше. Удачи.