选择没有连接数据的事件的最快方法

时间:2013-11-13 04:42:13

标签: mysql performance exists

我有两张桌子:

Event
ID, StartTime

Video
ID, StartTime, Endtime

我需要找到任何没有视频的活动。

为此,我得到了以下查询(我已经尝试了很多)

SELECT * FROM
(Select E.*,V.ID FROM Events E LEFT JOIN Video V On E.StartTime >= V.StartTime AND E.StartTime <= V.EndTime) A
HAVING V.ID IS NULL

这似乎产生了正确的数据,但它太慢了......(我在事件中有100000条记录,在视频中有10000条记录)。这大约需要2分钟。我有所有列的索引

有更快的方法吗?

1 个答案:

答案 0 :(得分:1)

您是否尝试删除子查询?

SELECT E.*
FROM Events E 
LEFT JOIN Video V On E.StartTime >= V.StartTime AND E.StartTime <= V.EndTime
WHERE V.ID IS NULL

或使用NOT EXISTS

SELECT E.*
FROM Events E 
WHERE NOT EXISTS (
  SELECT * FROM Video V WHERE E.StartTime >= V.StartTime AND E.StartTime <= V.EndTime
)
相关问题