需要有关查询优化的指导。 我有两个表userEvents和事件
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
)
我能够得到结果。我想知道如何OPTIMIZE这个查询,因为有大量的行。
答案 0 :(得分:3)
您可以使用LEFT JOIN
:
SELECT e.*
FROM events AS e
LEFT JOIN userEvents AS v ON e.id = v.eventid
WHERE e.id IS NULL;
或者:删除子查询中的INNER JOIN
,您不需要它:
select id, name
from events
where id NOT IN (select eventid
from userEvents
where eventid IS NOT NULL)
请注意:谓词IN
对于来自NULL
列的eventid
值不安全,这就是我添加eventid IS NOT NULL
的原因到子查询。在这种情况下,LEFT JOIN
会更安全。