我正在尝试优化以下查询。我认为外部连接可以解决问题,但我不知道如何将它放在一起。
// ---------------------------------
// Simplified representation of data
// ---------------------------------
create table views (
user_id,
article_id
)
create table article_attributes (
article_id,
article_attribute_id
)
create table articles (
id,
title,
date
)
Views 表有几千万条记录。文章表有几十万。
我正在尝试将所有文章与与其关联的某个属性匹配,并且尚未被用户查看。
我已经尝试过,但不能很好地扩展:
select a.title, a.sid as article_id, a.total_views as times_read, a.date
from articles a
join article_attributes att on att.article_id = a.sid
where a.sid not in(
select v.article_id
from views v
join article_attributes att on att.article_id = v.article_id
where user_id = 132385
and att.article_attribute_id = 10
group by v.article_id
)
and att.article_attribute_id = 10
and a.date >= DATE_SUB(CURRENT_DATE(), INTERVAL 7 day)
order by total_views desc
limit 5
这工作正常,但用户查看的文章越多,速度就会明显变慢。任何想法或建议将不胜感激。