Пользователь на сайте подписывается на авторов и читает их новости.
Мне нужно вывести список всех авторов, на которых пользователь подписан и количество непросмотренных новостей у каждого из этих авторов.
Есть таблица постов
postsid
author_id
text
Таблица авторов постов
authorsid
name
Таблица просмотренных пользователем постов
post_userid
user_id
post_id
Таблица связи подписки пользователей на авторов
author_userid
user_id
author_id
Вариант 1:
select author_id, count(id)
from posts
where exists (select * from author_user where user_id = 2 and author_id = posts.author_id)
and not exists (select * from post_user where user_id = 2 and post_id = posts.id)
group by author_id
Вариант 2:
select author_id, count(id)
from posts
where author_id in (select author_id from author_user where user_id = 2)
and id not in (select post_id from post_user where user_id = 2)
group by author_id
Оба запроса в explain показывают абсолютно одинаковый результат. Значение поля rows в explain очень велико (около 3 000 000)
Предпочтительнее ли какой-то из этих вариантов или может быть есть лучший вариант?