如何优化这个Mysql查询
需要查询优化方面的指导。 我有两个表userEvents和events如何优化这个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
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