我有两张桌子:
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分钟。我有所有列的索引
有更快的方法吗?
答案 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
)