SELECT `id`, `field2`, `field3`, `field4` as Title FROM `articles`
WHERE `category_id` = 'X'
AND `id` NOT IN
(SELECT `articleid` FROM `article-seen` WHERE `userid` = 'Y')
我该如何优化呢?我认为双重选择不好,但我是 mysql 新手
SELECT `id`, `field2`, `field3`, `field4` as Title FROM `articles`
WHERE `category_id` = 'X'
AND `id` NOT IN
(SELECT `articleid` FROM `article-seen` WHERE `userid` = 'Y')
我该如何优化呢?我认为双重选择不好,但我是 mysql 新手
优化取决于(我认为)您使用的 MySQL 版本。
这就是你写它的方式join
:
SELECT `id`, `field2`, `field3`, `field4` as Title
FROM `articles` a left outer join
`articles_seen` arts
on a.id = arts.articleid and arts.userid = 'Y'
where a.`category_id` = 'X' and
arts.id is null;
至少,此查询不会实现子查询,(我认为)您最初的查询会。
为了加快速度,您需要添加索引。想到的是:articles(category_id, id)
和articles_seen(userid, articleid)
。您还可以将第一个索引中的字段添加select
到第一个索引中,这样整个查询就可以通过查看索引来满足,而不是返回到主表。
尝试使用 JOIN 可以获得相同的结果,但会使查询看起来更简单