如何优化这个Mysql查询

时间:2013-05-16 07:41:34

标签: mysql optimization

需要有关查询优化的指导。 我有两个表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这个查询,因为有大量的行。

1 个答案:

答案 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会更安全。