如何优化双选查询

时间:2013-07-17 14:26:36

标签: mysql optimization

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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中的字段添加到第一个索引,因此可以通过查看索引来满足整个查询,而不是返回到主表。