我有以下查询:
SELECT
tl.*, d.*
FROM
TrackerLocations AS tl
inner join Trackers t on tl.TrackerId = t.TrackerId
inner join Devices d on t.UserId = d.UserId
WHERE
tl.ReceivedTime = (SELECT MAX(tl2.ReceivedTime) FROM TrackerLocations tl2 WHERE tl2.TrackerId = tl.TrackerId)
and tl.ReceivedTime >= DATEADD (MINUTE,-2,GETUTCDATE())
and d.OSType <> 3
and d.Notify = 1
...令我惊讶的是,它不会在可接受的时间内返回结果。我第一次在生产环境中运行它,就像执行了 3 秒。现在,它一直运行到超时(在 C# 应用程序内,30 秒)。
主要目的是:“向我提供任何跟踪器的最新位置以及有关其用户设备的信息,向后看 2 分钟”。
有关优化此查询的任何提示?
谢谢!
索引: Anywhere but where 子句列(ReceivedTime、OSType、Notify)。
关于执行计划,这是一件大事,我不太熟悉。我应该把它贴在这里吗?:)