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

同じ結果が得られますが、クエリがより単純に見えるようになる JOIN を使用してみてください

于 2013-07-17T14:31:14.670 に答える
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 に答える