2013-05-16 104 views
0

需要關於查詢優化的指導。 我有兩個表userEvents和事件如何優化此Mysql查詢

userEvents 
id | userName | eventID 

events 
id | name 

我需要找到所有

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 
       ) 

我能夠得到的結果。我想知道如何能已不能userEvents EVENTID事件名稱我優化了這個查詢,因爲有大量的行。

回答

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是不安全,eventid列中的值爲NULL,這就是爲什麼我添加了eventid IS NOT NULL到子查詢。在這種情況下,LEFT JOIN將更安全。

+0

其中條件應爲e.eventID爲空 – Vidya