Improve approvals user count query

As pointed on https://gitlab.com/gitlab-org/gitlab-ce/issues/32536, the new MR widget live update brought up a slow query being made on https://gitlab.com/gitlab-org/gitlab-ee/blob/master/app/models/concerns/approvable.rb#L37-60. As a quick solution, this field stopped being exposed on MergeRequestEntity (https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/1933) - where it was polled every 10s unnecessarily. But, ultimately, this query should be improved.

SELECT COUNT(*)
FROM users
WHERE (users.state IN (?))
AND (users.ghost = ? OR users.ghost IS NULL)
AND (users.support_bot = ? OR users.support_bot IS NULL)
AND (
    (
        id IN (
            SELECT members.user_id
            FROM members
            WHERE members.source_type = ?
            AND members.type IN (?) 
            AND members.source_id = ?
            AND members.source_type = ?
            AND members.type IN (?)
            AND members.requested_at IS NULL
            AND (access_level > ?)
            ORDER BY members.id DESC
        )
        OR id IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        OR id IN (
            SELECT members.user_id
            FROM members
            WHERE members.source_type = ?
            AND members.type IN (?)
            AND members.source_id = ?
            AND members.source_type = ?
            AND members.type IN (?)
            AND members.requested_at IS NULL
            AND (access_level > ?)
            ORDER BY members.id DESC
        )
    )
    AND id NOT IN (
        SELECT approvals.user_id
        FROM approvals
        WHERE approvals.merge_request_id = ?
    )
)
AND (users.id != ?)
Edited by Coung Ngo