0
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 新手

4

2 回答 2

0

优化取决于(我认为)您使用的 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到第一个索引中,这样整个查询就可以通过查看索引来满足,而不是返回到主表。

于 2013-07-17T15:17:46.230 回答
0

尝试使用 JOIN 可以获得相同的结果,但会使查询看起来更简单

于 2013-07-17T14:31:14.670 回答