0

我有两张桌子:

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 分钟。我对所有列都有索引

有没有更快的方法来做到这一点?

4

1 回答 1

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
)
于 2013-11-14T02:42:53.000 回答