MySQL子查询优化

MySQL子查询优化,mysql,Mysql,我有一个查询运行得非常慢: SELECT * FROM games WHERE games.platform =13 AND games.id NOT IN (SELECT game_id FROM collections WHERE collections.user_id =1) 我试图将其重写为左联接,但返回0个结果: SELECT * FROM games LEFT JOIN collections ON collections.game_id = games.id WHERE

我有一个查询运行得非常慢:

SELECT * 
FROM games
WHERE games.platform =13
AND games.id NOT 
IN (SELECT game_id
FROM collections
WHERE collections.user_id =1)
我试图将其重写为左联接,但返回0个结果:

SELECT * 
FROM games 
LEFT JOIN collections ON collections.game_id = games.id 
WHERE collections.game_id IS NULL AND collections.user_id = 1 AND games.platform = 13
ORDER BY games.name ASC
有人能指出我的错误吗

SELECT games.* 
FROM   games 
       LEFT JOIN collections 
         ON collections.user_id = 1 
            AND collections.game_id = games.id 
WHERE  games.platform = 13 
       AND collections.game_id IS NULL 
ORDER  BY games.name ASC 
你需要索引

  • (游戏编号、平台、名称)
  • (收藏。用户id,收藏。游戏id)
你需要索引

  • (游戏编号、平台、名称)
  • (收藏。用户id,收藏。游戏id)

尝试使用#完全外部连接,因为它将指向您的所有内容,不匹配的内容将返回null。尝试使用#完全外部连接,因为它将指向您的所有内容,不匹配的内容将返回null。我认为最好的索引是
游戏(id)
集合(用户id,游戏id)
select*使其余部分没有意义。还要考虑改变<代码>选择*<代码> >代码>选择游戏。* < /代码>你们是摇滚明星!谢谢。我认为最好的索引是
games(id)
collections(user\u id,game\u id)
select*使其余的都没有意义。还要考虑改变<代码>选择*<代码> >代码>选择游戏。* < /代码>你们是摇滚明星!谢谢