将所有内容标记为已读

时间:2015-12-29 14:01:12

标签: sql postgresql

我对这个有一点脑力锁定。

TLDR; 我如何实现"标记为读取"百万项有效吗?

我有一个将所有文章标记为已读的用例。成千上万。 我现在所拥有的解决方案适用于少量文章,但对于大数字而言,它非常非常慢。 这主要是因为对于每一篇阅读文章,我都在用一个新行填充一个表。 在一次交易中我是否进行了100次插入或者插入到选择(bla bla bla)中它仍然需要很长时间并不重要。 我想知道切换到postgresql的数组,但我不确定这将如何适用于数十万个项目。

有什么建议会是最好的方法吗?

我有3张桌子:

articles
- id
- title

users
- id
- name

和一个表格,其中包含用户已阅读的文章。

read_articles
- article_id - foreign key
- user_id - foreign key

3 个答案:

答案 0 :(得分:1)

为什么不从read_article表中删除外键并在两列上创建唯一索引。这应该加快搜索和插入查询。要检查文章是否已被读取,您可以在主查询中使用子查询,并且在表中插入行时可以使用upsert语句。

我认为将文章和用户ID与外键链接是浪费时间和cpu,因为你确实需要一致性,但这并不是那么重要。

答案 1 :(得分:0)

insert into read_articles (article_id, user_id)
select a.id, u.id
from articles a cross join users u

答案 2 :(得分:-1)

<script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>