有3个实体 - articles
,journals
和subscribers
。如何在数据库中存储数据没有限制。
同一篇文章可以同时发表在几个期刊上。
如何从已订阅的期刊中选择所有已发表的文章 截止日期,没有重复?
最简单的方法:
创建包含文章的表格:
的帖子
p_id
,j1_id
,j2_id
,text
,date
创建一个包含订阅的表格:
的如下
f_id
,u_id
,j_id
(u_id - 表用户中的用户ID)
执行:
示例查询
select posts.* from posts inner join follows on (j_id = j1_id or j_id
= j2_id) where u_id = 1 order by date desc
此查询返回带有重复项的数据。您可以使用DISTINCT
或GROUP BY
机制,但它会创建一个额外的排序操作来删除重复项。
使用机制UNION
可以完成另一种方式,但它也使用DISTINCT
。
(select posts.* from posts inner join follows on j_id = j1_id where u_id = 1)
union
(select posts.* from posts inner join follows on j_id = j2_id where u_id = 1)
order by date desc
也许我按照自己的方式选择了不正确的存储结构。
实际上问题是,是否可以对此问题采取措施,以最大限度地减少大数据所需的时间?
答案 0 :(得分:0)
您可以使用以下表格结构
帖子:pid,文字,日期 期刊:jid,jtext journals_posts:jid,pid 如下:fid,uid,jid
select distinct posts.* from posts
inner join journals_posts on journals_posts.pid = posts.pid
inner join follows on follows.jid = journals_posts.jid
where follows.uid = <userid>
照顾速度你可以创建索引 journals_posts(JID) 如下(UID)
您可能需要在其他字段上创建索引,并使用“explain”检查在不使用连接的情况下扫描哪些表