【发布时间】:2013-04-26 22:24:07
【问题描述】:
我正在尝试优化以下查询。我认为外部连接可以解决问题,但我不知道如何将它组合在一起。
// ---------------------------------
// 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
这很好用,但用户查看的文章越多,速度就会明显变慢。任何想法或建议将不胜感激。
【问题讨论】:
标签: php mysql query-optimization