如何优化这个Mysql查询

如何优化这个Mysql查询,mysql,optimization,Mysql,Optimization,需要查询优化方面的指导。 我有两个表userEvents和events userEvents id | userName | eventID events id | name 我需要找到userEvents中没有eventID的所有事件名称 select id, name from events where id NOT IN ( select eventid from userEvents inner join

需要查询优化方面的指导。 我有两个表userEvents和events

userEvents
id |  userName | eventID

events
id |  name
我需要找到userEvents中没有eventID的所有事件名称

select id, name
from  events
where id NOT IN ( select eventid
                  from userEvents
                  inner join events on events.id = userEvents.eventid
                  group by userEvents.eventID
                ) 

我能够得到结果。我想知道如何优化这个查询,因为有大量的行

您可以使用
左连接

SELECT e.*
FROM events AS e
LEFT JOIN userEvents AS v ON e.id = v.eventid
WHERE e.id IS NULL;
或:删除子查询中的
内部联接
,您不需要它:

select id, name 
from  events 
where id NOT IN (select eventid 
                 from userEvents 
                 where eventid IS NOT NULL)

注意:对于来自
eventid
列的
NULL
值,中的谓词
是不安全的,这就是我将
eventid不为NULL
添加到子查询的原因<代码>左连接
在这种情况下会更安全。

您可以使用
左连接

SELECT e.*
FROM events AS e
LEFT JOIN userEvents AS v ON e.id = v.eventid
WHERE e.id IS NULL;
或:删除子查询中的
内部联接
,您不需要它:

select id, name 
from  events 
where id NOT IN (select eventid 
                 from userEvents 
                 where eventid IS NOT NULL)

注意:对于来自
eventid
列的
NULL
值,中的谓词
是不安全的,这就是我将
eventid不为NULL
添加到子查询的原因<代码>左连接
在这种情况下更安全。

其中条件应为e.eventID为null其中条件应为e.eventID为null