gpt4 book ai didi

mysql - 高效地在 SQL 表中创建大量条目

转载 作者:行者123 更新时间:2023-11-29 08:27:36 25 4
gpt4 key购买 nike

我正在构建一个 RSS 阅读器,可以在阅读帖子时进行注释(就像 Google Reader 所做的那样)。我让它工作到了这样的程度,当我向下滚动时,它通过将行插入到“阅读文章”表中来将帖子标记为已读,该表记录了已读的项目(ciid)、阅读它的用户( uid)和读取日期(dateRead)。

现在,我正在考虑如何提供“全部标记为已读”功能。如果只有 25 篇未读文章,那就很简单了。我会查询主文章表中的 25 篇文章 - 我有一个子查询来确定哪些文章未​​读 - 当前用户未读,收集需要标记为已读的 ciid并插入新的读取条目。但是,如果有 20,000 个条目未读怎么办?检索 20,000 个未读条目,收集这些 ciid,然后向 MySQL 服务器发送回 20,000 个插入命令,这似乎效率相当低。

有没有更有效的方法来做到这一点,也许使用直接处理所有这些的 SQL 查询?如果系统上只有一两个用户,我想我的低效方法不会成为问题,但我希望系统能够相对良好地扩展。

最佳答案

你可以做类似的事情

REPLACE INTO read_articles (uid, dateread, ciid) 
SELECT <user-id>, NOW(), id FROM articles

您必须在其中指定要插入的用户 ID。 REPLACE INTO 将删除任何现有的日期读取。如果您不想要这种行为,您可以这样做

INSERT INTO read_articles (uid, dateread, ciid) 
SELECT <user-id>, NOW(), id FROM articles
ON DUPLICATE KEY UPDATE uid=uid;

但是,我认为您所采用的方法(按文章存储已阅读的文章)是不可扩展的。当用户单击全部标记时,您可以将该事件的日期时间存储在用户表中。所有早于最后标记日期的文章都被视为已读。

也许您应该只考虑表格中最近 7 天的文章,即。定期删除超过一周的 read_articles 记录。所有超过 7 天的文章您都会忽略(因此实际上您假设它们已被阅读)。

关于mysql - 高效地在 SQL 表中创建大量条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17517420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com