gpt4 book ai didi

mysql - 有效地只向用户显示他之前没有看到的项目(mysql)

转载 作者:行者123 更新时间:2023-11-29 07:02:26 27 4
gpt4 key购买 nike

这个问题适用于包含项目(例如:新闻文章)和观看这些项目的用户的任何类型的系统。

假设我有一个用户表([id],[username]),一个文章表([id],[title],[text]) 以及包含所有用户查看的所有文章的表格 ([user_id],[article_id])

我想做的是有效地只向用户展示他以前没有读过的文章。

我知道我可以做类似的事情

select id,title,text from articles where id not in (select article_id
from article_views where user_id = 123)

但是如果当前用户已经阅读了 100 万篇文章怎么办?查询将变成类似

select id,... from articles where id not in (1,2,3,......1000000)

我可以假设,这太慢而不实用。

此外,这很糟糕,因为用户阅读的文章越多 - 他检索新(未读)文章的响应时间就越慢。

任何其他建议,db-wise?

最佳答案

有时,通过执行 LEFT JOIN 并仅返回 NULL(即:未找到)条目可能比子选择更快。它直接连接 A:B 并且仅包括未找到匹配项的那些

select
a.id,
a.title,
a.text
from
articles a
LEFT JOIN article_views av
on av.User_ID = 123
AND a.id = av.article_id
where
av.article_id IS NULL

我会确保在 ( UserID, Article_ID ) 上建立索引(我相信无论如何这将是您对该表的主键)。

关于mysql - 有效地只向用户显示他之前没有看到的项目(mysql),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9417181/

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